diff options
Diffstat (limited to 'indra')
161 files changed, 1810 insertions, 937 deletions
| diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index f0b44f97d2..7f747c2eca 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -215,7 +215,7 @@ BOOL LLVorbisDecodeState::initDecode()  		return(FALSE);  	} -	S32 sample_count = ov_pcm_total(&mVF, -1); +	S32 sample_count = (S32)ov_pcm_total(&mVF, -1);  	size_t size_guess = (size_t)sample_count;  	vorbis_info* vi = ov_info(&mVF, -1);  	size_guess *= (vi? vi->channels : 1); diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index a47ee7ca7c..28b69e1973 100644 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -37,6 +37,7 @@  #include "lluuid.h"  #include "llframetimer.h"  #include "llassettype.h" +#include "llextendedstatus.h"  #include "lllistener.h" diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp index f3cf950afa..2a0df26384 100644 --- a/indra/llcharacter/llbvhloader.cpp +++ b/indra/llcharacter/llbvhloader.cpp @@ -1570,7 +1570,7 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp)  		constraint_it++)  		{  			U8 byte = constraint_it->mChainLength; -			dp.packU8(byte, "chain_lenght"); +			dp.packU8(byte, "chain_length");  			byte = constraint_it->mConstraintType;  			dp.packU8(byte, "constraint_type"); diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h index bdcc98e402..5cfcdab41c 100644 --- a/indra/llcommon/linden_common.h +++ b/indra/llcommon/linden_common.h @@ -52,34 +52,11 @@  #include <ctime>  #include <iosfwd> -// Work around Microsoft compiler warnings in STL headers -#ifdef LL_WINDOWS -#pragma warning (disable : 4702) // unreachable code -#pragma warning (disable : 4244) // conversion from time_t to S32 -#endif	//	LL_WINDOWS - -// *TODO: Eliminate these, most library .cpp files don't need them. -// Add them to llviewerprecompiledheaders.h if necessary. -#include <list> -#include <map> -#include <vector> -#include <string> - -#ifdef LL_WINDOWS -// Reenable warnings we disabled above -#pragma warning (3 : 4702) // unreachable code, we like level 3, not 4 -// moved msvc warnings to llpreprocessor.h  *TODO - delete this comment after merge conflicts are unlikely -brad -#endif	//	LL_WINDOWS -  // Linden only libs in alpha-order other than stdtypes.h  // *NOTE: Please keep includes here to a minimum, see above.  #include "stdtypes.h"  #include "lldefs.h"  #include "llerror.h" -#include "llextendedstatus.h" -// Don't do this, adds 15K lines of header code to every library file. -//#include "llfasttimer.h"  #include "llfile.h" -#include "llformat.h"  #endif diff --git a/indra/llcommon/llavatarname.cpp b/indra/llcommon/llavatarname.cpp index ba3dd6d6b4..3206843bf4 100644 --- a/indra/llcommon/llavatarname.cpp +++ b/indra/llcommon/llavatarname.cpp @@ -106,6 +106,11 @@ std::string LLAvatarName::getCompleteName() const  std::string LLAvatarName::getLegacyName() const  { +	if (mLegacyFirstName.empty() && mLegacyLastName.empty()) // display names disabled? +	{ +		return mDisplayName; +	} +  	std::string name;  	name.reserve( mLegacyFirstName.size() + 1 + mLegacyLastName.size() );  	name = mLegacyFirstName; diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp index db1ea4792b..0855180dcd 100644 --- a/indra/llcommon/llevents.cpp +++ b/indra/llcommon/llevents.cpp @@ -430,13 +430,13 @@ LLBoundListener LLEventPump::listen_impl(const std::string& name, const LLEventL      {          // The new node isn't last. Place it between the previous node and          // the successor. -        newNode = (myprev + mydmi->second)/2.0; +        newNode = (myprev + mydmi->second)/2.f;      }      else      {          // The new node is last. Bump myprev up to the next integer, add          // 1.0 and use that. -        newNode = std::ceil(myprev) + 1.0; +        newNode = std::ceil(myprev) + 1.f;      }      // Now that newNode has a value that places it appropriately in mSignal,      // connect it. diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp index 75fde8e5ba..1409c55d1c 100644 --- a/indra/llcommon/llmd5.cpp +++ b/indra/llcommon/llmd5.cpp @@ -175,7 +175,7 @@ void LLMD5::update(std::istream& stream){    while (stream.good()){      stream.read( (char*)buffer, BLOCK_LEN); 	/* Flawfinder: ignore */		// note that return value of read is unusable. -    len=stream.gcount(); +    len=(int)stream.gcount();      update(buffer, len);    } diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index 31d5f3d2c7..7fdb537ab5 100644 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -132,7 +132,7 @@  #pragma warning( 3       : 4265 )	// "class has virtual functions, but destructor is not virtual"  #pragma warning( 3      :  4266 )	// 'function' : no override available for virtual member function from base 'type'; function is hidden  #pragma warning (disable : 4180)	// qualifier applied to function type has no meaning; ignored -#pragma warning( disable : 4284 )	// silly MS warning deep inside their <map> include file +//#pragma warning( disable : 4284 )	// silly MS warning deep inside their <map> include file  #pragma warning( disable : 4503 )	// 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.  #pragma warning( disable : 4800 )	// 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)  #pragma warning( disable : 4996 )	// warning: deprecated @@ -152,6 +152,7 @@  #pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class  #pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class  #pragma warning (disable : 4018) // '<' : signed/unsigned mismatch	 +  #endif	//	LL_MSVC  #if LL_WINDOWS diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index bf62600514..b419101b7e 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -110,7 +110,7 @@ bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, S32 max_bytes)  	if (!strncasecmp(LEGACY_NON_HEADER, hdr_buf, strlen(LEGACY_NON_HEADER))) /* Flawfinder: ignore */  	{  		legacy_no_header = true; -		inbuf = str.gcount(); +		inbuf = (int)str.gcount();  	}  	else  	{ @@ -343,7 +343,7 @@ std::istream& LLSDParser::get(  	char delim) const  {  	istr.get(s, n, delim); -	if(mCheckLimits) mMaxBytesLeft -= istr.gcount(); +	if(mCheckLimits) mMaxBytesLeft -= (int)istr.gcount();  	return istr;  } @@ -353,7 +353,7 @@ std::istream& LLSDParser::get(  		char delim) const		  {  	istr.get(sb, delim); -	if(mCheckLimits) mMaxBytesLeft -= istr.gcount(); +	if(mCheckLimits) mMaxBytesLeft -= (int)istr.gcount();  	return istr;  } @@ -377,7 +377,7 @@ std::istream& LLSDParser::read(  	std::streamsize n) const  {  	istr.read(s, n); -	if(mCheckLimits) mMaxBytesLeft -= istr.gcount(); +	if(mCheckLimits) mMaxBytesLeft -= (int)istr.gcount();  	return istr;  } @@ -789,7 +789,7 @@ bool LLSDNotationParser::parseBinary(std::istream& istr, LLSD& data) const  		if(len)  		{  			value.resize(len); -			account(fullread(istr, (char *)&value[0], len)); +			account((int)fullread(istr, (char *)&value[0], len));  		}  		c = get(istr); // strip off the trailing double-quote  		data = value; @@ -1069,7 +1069,7 @@ S32 LLSDBinaryParser::doParse(std::istream& istr, LLSD& data) const  			if(size > 0)  			{  				value.resize(size); -				account(fullread(istr, (char*)&value[0], size)); +				account((int)fullread(istr, (char*)&value[0], size));  			}  			data = value;  		} @@ -1200,7 +1200,7 @@ bool LLSDBinaryParser::parseString(  	if(size)  	{  		buf.resize(size); -		account(fullread(istr, &buf[0], size)); +		account((int)fullread(istr, &buf[0], size));  		value.assign(buf.begin(), buf.end());  	}  	return true; @@ -1642,7 +1642,7 @@ int deserialize_string_raw(  	const S32 BUF_LEN = 20;  	char buf[BUF_LEN];		/* Flawfinder: ignore */  	istr.get(buf, BUF_LEN - 1, ')'); -	count += istr.gcount(); +	count += (int)istr.gcount();  	int c = istr.get();  	c = istr.get();  	count += 2; @@ -1657,7 +1657,7 @@ int deserialize_string_raw(  		if(len)  		{  			buf.resize(len); -			count += fullread(istr, (char *)&buf[0], len); +			count += (int)fullread(istr, (char *)&buf[0], len);  			value.assign(buf.begin(), buf.end());  		}  		c = istr.get(); diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp index be9db53906..34b3dbb99a 100644 --- a/indra/llcommon/llsdserialize_xml.cpp +++ b/indra/llcommon/llsdserialize_xml.cpp @@ -464,7 +464,7 @@ S32 LLSDXMLParser::Impl::parseLines(std::istream& input, LLSD& data)  			}  		} -		status = XML_ParseBuffer(mParser, num_read, false); +		status = XML_ParseBuffer(mParser, (int)num_read, false);  		if (status == XML_STATUS_ERROR)  		{  			break; diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h index 65c7297cbf..532d3f9341 100644 --- a/indra/llcommon/llsdutil.h +++ b/indra/llcommon/llsdutil.h @@ -308,7 +308,7 @@ class LLSDParam<T>                              \  {                                               \  public:                                         \      LLSDParam(const LLSD& value):               \ -        _value(value.AS())                      \ +        _value((T)value.AS())                      \      {}                                          \                                                  \      operator T() const { return _value; }       \ diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index b2c495d093..057257057f 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -593,7 +593,7 @@ void LLStatTime::stop()  {      if ( LLStatAccum::SCALE_PER_FRAME == scale )      { -        return mTotalTimeInFrame; +        return (F32)mTotalTimeInFrame;      }      else      { diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp index 38054b636e..9ebc6de7f4 100644 --- a/indra/llcommon/lltimer.cpp +++ b/indra/llcommon/lltimer.cpp @@ -83,7 +83,7 @@ U32 micro_sleep(U64 us, U32 max_yields)  {      // max_yields is unused; just fiddle with it to avoid warnings.      max_yields = 0; -    ms_sleep(us / 1000); +	ms_sleep((U32)(us / 1000));      return 0;  }  #elif LL_LINUX || LL_SOLARIS || LL_DARWIN diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 3461aa3e6c..d6dcde4b9f 100644 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -250,7 +250,7 @@ void LLCrashLogger::gatherFiles()  		if(minidump_stream.is_open())  		{  			minidump_stream.seekg(0, std::ios::end); -			size_t length = minidump_stream.tellg(); +			size_t length = (size_t)minidump_stream.tellg();  			minidump_stream.seekg(0, std::ios::beg);  			LLSD::Binary data; diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index cc8cb66d73..8241746a74 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -501,10 +501,10 @@ void LLImageCompressionTester::outputTestRecord(LLSD *sd)  	F32 decompressionRate = 0.0f;  	F32 compressionRate   = 0.0f; -	F32 totalkBInDecompression  = (F32)(mTotalBytesInDecompression)  / 1000.0; -	F32 totalkBOutDecompression = (F32)(mTotalBytesOutDecompression) / 1000.0; -	F32 totalkBInCompression    = (F32)(mTotalBytesInCompression)    / 1000.0; -	F32 totalkBOutCompression   = (F32)(mTotalBytesOutCompression)   / 1000.0; +	F32 totalkBInDecompression  = (F32)(mTotalBytesInDecompression)  / 1000.f; +	F32 totalkBOutDecompression = (F32)(mTotalBytesOutDecompression) / 1000.f; +	F32 totalkBInCompression    = (F32)(mTotalBytesInCompression)    / 1000.f; +	F32 totalkBOutCompression   = (F32)(mTotalBytesOutCompression)   / 1000.f;  	if (!is_approx_zero(mTotalTimeDecompression))  	{ diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index 76760aa414..fbf23bc3f0 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -405,7 +405,7 @@ U32 LLInventoryItem::getCRC32() const  	//lldebugs << "7 crc: " << std::hex << crc << std::dec << llendl;  	crc += mSaleInfo.getCRC32();  	//lldebugs << "8 crc: " << std::hex << crc << std::dec << llendl; -	crc += mCreationDate; +	crc += (U32)mCreationDate;  	//lldebugs << "9 crc: " << std::hex << crc << std::dec << llendl;  	return crc;  } @@ -521,7 +521,7 @@ void LLInventoryItem::packMessage(LLMessageSystem* msg) const  	mSaleInfo.packMessage(msg);  	msg->addStringFast(_PREHASH_Name, mName);  	msg->addStringFast(_PREHASH_Description, mDescription); -	msg->addS32Fast(_PREHASH_CreationDate, mCreationDate); +	msg->addS32Fast(_PREHASH_CreationDate, (S32)mCreationDate);  	U32 crc = getCRC32();  	msg->addU32Fast(_PREHASH_CRC, crc);  } diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h index bd9c8c2519..e0ad270266 100644 --- a/indra/llmath/llcalcparser.h +++ b/indra/llmath/llcalcparser.h @@ -174,7 +174,7 @@ private:  	F32 _log(const F32& a) const { return log(a); }  	F32 _exp(const F32& a) const { return exp(a); }  	F32 _fabs(const F32& a) const { return fabs(a); } -	F32 _floor(const F32& a) const { return llfloor(a); } +	F32 _floor(const F32& a) const { return (F32)llfloor(a); }  	F32 _ceil(const F32& a) const { return llceil(a); }  	F32 _atan2(const F32& a,const F32& b) const { return atan2(a,b); } diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 761fc171c4..cc9744756f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2904,7 +2904,7 @@ F32 LLVolume::sculptGetSurfaceArea()  			// compute the area of the quad by taking the length of the cross product of the two triangles  			LLVector3 cross1 = (p1 - p2) % (p1 - p3);  			LLVector3 cross2 = (p4 - p2) % (p4 - p3); -			area += (cross1.magVec() + cross2.magVec()) / 2.0; +			area += (cross1.magVec() + cross2.magVec()) / 2.f;  		}  	} @@ -5890,7 +5890,7 @@ F32 find_vertex_score(LLVCacheVertexData& data)  	}  	//bonus points for having low valence -	F32 valence_boost = powf(data.mActiveTriangles, -FindVertexScore_ValenceBoostPower); +	F32 valence_boost = powf((F32)data.mActiveTriangles, -FindVertexScore_ValenceBoostPower);  	score += FindVertexScore_ValenceBoostScale * valence_boost;  	return score; diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp index bad4deb4de..6a1b4143cf 100644 --- a/indra/llmath/m4math.cpp +++ b/indra/llmath/m4math.cpp @@ -858,25 +858,25 @@ LLSD LLMatrix4::getValue() const  void LLMatrix4::setValue(const LLSD& data)   { -	mMatrix[0][0] = data[0].asReal(); -	mMatrix[0][1] = data[1].asReal(); -	mMatrix[0][2] = data[2].asReal(); -	mMatrix[0][3] = data[3].asReal(); - -	mMatrix[1][0] = data[4].asReal(); -	mMatrix[1][1] = data[5].asReal(); -	mMatrix[1][2] = data[6].asReal(); -	mMatrix[1][3] = data[7].asReal(); - -	mMatrix[2][0] = data[8].asReal(); -	mMatrix[2][1] = data[9].asReal(); -	mMatrix[2][2] = data[10].asReal(); -	mMatrix[2][3] = data[11].asReal(); - -	mMatrix[3][0] = data[12].asReal(); -	mMatrix[3][1] = data[13].asReal(); -	mMatrix[3][2] = data[14].asReal(); -	mMatrix[3][3] = data[15].asReal(); +	mMatrix[0][0] = (F32)data[0].asReal(); +	mMatrix[0][1] = (F32)data[1].asReal(); +	mMatrix[0][2] = (F32)data[2].asReal(); +	mMatrix[0][3] = (F32)data[3].asReal(); + +	mMatrix[1][0] = (F32)data[4].asReal(); +	mMatrix[1][1] = (F32)data[5].asReal(); +	mMatrix[1][2] = (F32)data[6].asReal(); +	mMatrix[1][3] = (F32)data[7].asReal(); + +	mMatrix[2][0] = (F32)data[8].asReal(); +	mMatrix[2][1] = (F32)data[9].asReal(); +	mMatrix[2][2] = (F32)data[10].asReal(); +	mMatrix[2][3] = (F32)data[11].asReal(); + +	mMatrix[3][0] = (F32)data[12].asReal(); +	mMatrix[3][1] = (F32)data[13].asReal(); +	mMatrix[3][2] = (F32)data[14].asReal(); +	mMatrix[3][3] = (F32)data[15].asReal();  } diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 3bcaffc275..b93d429feb 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -271,10 +271,10 @@ void LLCurl::Easy::releaseEasyHandle(CURL* handle)  		if(sFreeHandles.size() < MAX_NUM_FREE_HANDLES)  		{ -			sFreeHandles.insert(handle); -		} -		else -		{ +		sFreeHandles.insert(handle); +	} +	else +	{  			LLCurl::deleteEasyHandle(handle) ;  		}  	} @@ -453,9 +453,9 @@ size_t curlReadCallback(char* data, size_t size, size_t nmemb, void* user_data)  	LLCurl::Easy* easy = (LLCurl::Easy*)user_data;  	S32 n = size * nmemb; -	S32 startpos = easy->getInput().tellg(); +	S32 startpos = (S32)easy->getInput().tellg();  	easy->getInput().seekg(0, std::ios::end); -	S32 endpos = easy->getInput().tellg(); +	S32 endpos = (S32)easy->getInput().tellg();  	easy->getInput().seekg(startpos, std::ios::beg);  	S32 maxn = endpos - startpos;  	n = llmin(n, maxn); @@ -560,16 +560,16 @@ LLCurl::Multi::Multi(F32 idle_time_out)  	}  	//llassert_always(mCurlMultiHandle);	 -	 +  	if(mCurlMultiHandle)  	{ -		if(LLCurl::getCurlThread()->getThreaded()) -		{ -			mMutexp = new LLMutex(NULL) ; -			mDeletionMutexp = new LLMutex(NULL) ; -			mEasyMutexp = new LLMutex(NULL) ; -		} -		LLCurl::getCurlThread()->addMulti(this) ; +	if(LLCurl::getCurlThread()->getThreaded()) +	{ +		mMutexp = new LLMutex(NULL) ; +		mDeletionMutexp = new LLMutex(NULL) ; +		mEasyMutexp = new LLMutex(NULL) ; +	} +	LLCurl::getCurlThread()->addMulti(this) ;  		mIdleTimeOut = idle_time_out ;  		if(mIdleTimeOut < LLCurl::sCurlRequestTimeOut) @@ -577,8 +577,8 @@ LLCurl::Multi::Multi(F32 idle_time_out)  			mIdleTimeOut = LLCurl::sCurlRequestTimeOut ;  		} -		++gCurlMultiCount; -	} +	++gCurlMultiCount; +}  }  LLCurl::Multi::~Multi() @@ -617,7 +617,7 @@ void LLCurl::Multi::cleanup()  	mDeletionMutexp = NULL ;  	delete mEasyMutexp ;  	mEasyMutexp = NULL ; -	 +  	mQueued = 0 ;  	mState = STATE_COMPLETED; @@ -738,7 +738,7 @@ bool LLCurl::Multi::doPerform()  		}  		mQueued = q;	 -		setState(STATE_COMPLETED) ;		 +		setState(STATE_COMPLETED) ;  		mIdleTimer.reset() ;  	}  	else if(mIdleTimer.getElapsedTimeF32() > mIdleTimeOut) //idle for too long, remove it. @@ -911,8 +911,8 @@ bool LLCurlThread::CurlRequest::processRequest()  		if(!completed)  		{ -			setPriority(LLQueuedThread::PRIORITY_LOW) ; -		} +		setPriority(LLQueuedThread::PRIORITY_LOW) ; +	}  	}  	return completed ; @@ -922,7 +922,7 @@ void LLCurlThread::CurlRequest::finishRequest(bool completed)  {  	if(mMulti->isDead())  	{ -		mCurlThread->deleteMulti(mMulti) ; +	mCurlThread->deleteMulti(mMulti) ;  	}  	else  	{ @@ -968,8 +968,8 @@ void LLCurlThread::killMulti(LLCurl::Multi* multi)  	if(multi->isValid())  	{ -		multi->markDead() ; -	} +	multi->markDead() ; +}  	else  	{  		deleteMulti(multi) ; @@ -1033,7 +1033,7 @@ void LLCurlRequest::addMulti()  		mActiveRequestCount = 0 ;  		return;  	} - +	  	mMultiSet.insert(multi);  	mActiveMulti = multi;  	mActiveRequestCount = 0; @@ -1229,15 +1229,15 @@ LLCurlEasyRequest::LLCurlEasyRequest()  	if(mMulti->isValid())  	{ -		mEasy = mMulti->allocEasy(); -		if (mEasy) -		{ -			mEasy->setErrorBuffer(); -			mEasy->setCA(); -			// Set proxy settings if configured to do so. -			LLProxy::getInstance()->applyProxySettings(mEasy); -		} +	mEasy = mMulti->allocEasy(); +	if (mEasy) +	{ +		mEasy->setErrorBuffer(); +		mEasy->setCA(); +		// Set proxy settings if configured to do so. +		LLProxy::getInstance()->applyProxySettings(mEasy);  	} +}  	else  	{  		LLCurl::getCurlThread()->killMulti(mMulti) ; diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp index 231cb7ca8f..0c325a68aa 100644 --- a/indra/llmessage/llhttpclient.cpp +++ b/indra/llmessage/llhttpclient.cpp @@ -158,7 +158,7 @@ namespace  			if(fstream.is_open())  			{  				fstream.seekg(0, std::ios::end); -				U32 fileSize = fstream.tellg(); +				U32 fileSize = (U32)fstream.tellg();  				fstream.seekg(0, std::ios::beg);  				std::vector<char> fileBuffer(fileSize);  				fstream.read(&fileBuffer[0], fileSize); diff --git a/indra/llmessage/llmime.cpp b/indra/llmessage/llmime.cpp index 943a734927..9d9c4ebd68 100644 --- a/indra/llmessage/llmime.cpp +++ b/indra/llmessage/llmime.cpp @@ -388,7 +388,7 @@ bool LLMimeParser::Impl::parseHeaders(  		// not to read past limit when we get() the newline.  		S32 max_get = llmin((S32)LINE_BUFFER_LENGTH, limit - mScanCount - 1);  		istr.getline(mBuffer, max_get, '\r'); -		mScanCount += istr.gcount(); +		mScanCount += (S32)istr.gcount();  		int c = istr.get();  		if(EOF == c)  		{ @@ -496,7 +496,7 @@ void LLMimeParser::Impl::scanPastSeparator(  		// past limit when we get() the newline.  		S32 max_get = llmin((S32)LINE_BUFFER_LENGTH, limit - mScanCount - 1);  		istr.getline(mBuffer, max_get, '\r'); -		mScanCount += istr.gcount(); +		mScanCount += (S32)istr.gcount();  		if(istr.gcount() >= LINE_BUFFER_LENGTH - 1)  		{  			// that's way too long to be a separator, so ignore it. diff --git a/indra/llmessage/llsdmessage.cpp b/indra/llmessage/llsdmessage.cpp index 9148c9dd15..1c93c12d99 100644 --- a/indra/llmessage/llsdmessage.cpp +++ b/indra/llmessage/llsdmessage.cpp @@ -88,7 +88,7 @@ bool LLSDMessage::httpListener(const LLSD& request)                                                         request,                                                         url, "POST", reply, error),                         LLSD(),      // headers -                       timeout); +                       (F32)timeout);      return false;  } diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp index 2698a271ee..615221e0ad 100644 --- a/indra/llmessage/llsdmessagebuilder.cpp +++ b/indra/llmessage/llsdmessagebuilder.cpp @@ -317,7 +317,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data)  			// S64 not supported in LLSD so we just truncate it  			case MVT_S64: -				addS32(varname, *(S64*)mvci.getData()); +				addS32(varname, (S32)*(S64*)mvci.getData());  				break;  			case MVT_F32: diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h index 989e8b2cab..f9348eb11f 100644 --- a/indra/llmessage/llxfer.h +++ b/indra/llmessage/llxfer.h @@ -29,6 +29,7 @@  #include "message.h"  #include "lltimer.h" +#include "llextendedstatus.h"  const S32 LL_XFER_LARGE_PAYLOAD = 7680; diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp index d0b0e178b8..6a425cfe98 100644 --- a/indra/llmessage/message.cpp +++ b/indra/llmessage/message.cpp @@ -3147,7 +3147,7 @@ bool LLMessageSystem::generateDigestForWindowAndUUIDs(char* digest, const S32 wi  		LL_ERRS("Messaging") << "Trying to generate complex digest on a machine without a shared secret!" << llendl;  	} -	U32 now = time(NULL); +	U32 now = (U32)time(NULL);  	now /= window; @@ -3167,7 +3167,7 @@ bool LLMessageSystem::isMatchingDigestForWindowAndUUIDs(const char* digest, cons  	}  	char our_digest[MD5HEX_STR_SIZE];	/* Flawfinder: ignore */ -	U32 now = time(NULL); +	U32 now = (U32)time(NULL);  	now /= window; @@ -3213,7 +3213,7 @@ bool LLMessageSystem::generateDigestForWindow(char* digest, const S32 window) co  		LL_ERRS("Messaging") << "Trying to generate simple digest on a machine without a shared secret!" << llendl;  	} -	U32 now = time(NULL); +	U32 now = (U32)time(NULL);  	now /= window; diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 82e8227ffe..6e6d02177d 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -115,23 +115,23 @@ static LLFastTimer::DeclareTimer FTM_RENDER_FONTS("Fonts");  S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, const LLRect& rect, const LLColor4 &color, HAlign halign, VAlign valign, U8 style,   					 ShadowType shadow, S32 max_chars, F32* right_x, BOOL use_ellipses) const  { -	F32 x = rect.mLeft; +	F32 x = (F32)rect.mLeft;  	F32 y = 0.f;  	switch(valign)  	{  	case TOP: -		y = rect.mTop; +		y = (F32)rect.mTop;  		break;  	case VCENTER: -		y = rect.getCenterY(); +		y = (F32)rect.getCenterY();  		break;  	case BASELINE:  	case BOTTOM: -		y = rect.mBottom; +		y = (F32)rect.mBottom;  		break;  	default: -		y = rect.mBottom; +		y = (F32)rect.mBottom;  		break;  	}  	return render(wstr, begin_offset, x, y, color, halign, valign, style, shadow, max_chars, rect.getWidth(), right_x, use_ellipses); @@ -185,9 +185,6 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	//gGL.translateUI(-pixel_offset_x, -pixel_offset_y, 0.f);  	LLVector2 origin(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY)); -	// snap the text origin to a pixel grid to start with -	origin.mV[VX] -= llround((F32)sCurOrigin.mX) - (sCurOrigin.mX); -	origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);  	// Depth translation, so that floating text appears 'inworld'  	// and is correclty occluded. @@ -215,16 +212,17 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	cur_y = ((F32)y * sScaleY) + origin.mV[VY];  	// Offset y by vertical alignment. +	// use unscaled font metrics here  	switch (valign)  	{  	case TOP: -		cur_y -= mFontFreetype->getAscenderHeight(); +		cur_y -= llceil(mFontFreetype->getAscenderHeight());  		break;  	case BOTTOM: -		cur_y += mFontFreetype->getDescenderHeight(); +		cur_y += llceil(mFontFreetype->getDescenderHeight());  		break;  	case VCENTER: -		cur_y -= (mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight()) / 2.f; +		cur_y -= llceil((llceil(mFontFreetype->getAscenderHeight()) - llceil(mFontFreetype->getDescenderHeight())) / 2.f);  		break;  	case BASELINE:  		// Baseline, do nothing. @@ -250,7 +248,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	cur_render_y = cur_y;  	cur_render_x = cur_x; -	F32 start_x = llround(cur_x); +	F32 start_x = (F32)llround(cur_x);  	const LLFontBitmapCache* font_bitmap_cache = mFontFreetype->getFontBitmapCache(); @@ -334,10 +332,10 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  				(fgi->mXBitmapOffset + fgi->mWidth) * inv_width,  				(fgi->mYBitmapOffset - PAD_UVY) * inv_height);  		// snap glyph origin to whole screen pixel -		LLRectf screen_rect(llround(cur_render_x + (F32)fgi->mXBearing), -				    llround(cur_render_y + (F32)fgi->mYBearing), -				    llround(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth, -				    llround(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight); +		LLRectf screen_rect((F32)llround(cur_render_x + (F32)fgi->mXBearing), +				    (F32)llround(cur_render_y + (F32)fgi->mYBearing), +				    (F32)llround(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth, +				    (F32)llround(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight);  		if (glyph_count >= GLYPH_BATCH_SIZE)  		{ @@ -390,12 +388,12 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	//FIXME: add underline as glyph?  	if (style_to_add & UNDERLINE)  	{ -		F32 descender = mFontFreetype->getDescenderHeight(); +		F32 descender = (F32)llfloor(mFontFreetype->getDescenderHeight());  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  		gGL.begin(LLRender::LINES); -		gGL.vertex2f(start_x, cur_y - (descender)); -		gGL.vertex2f(cur_x, cur_y - (descender)); +		gGL.vertex2f(start_x, cur_y - descender); +		gGL.vertex2f(cur_x, cur_y - descender);  		gGL.end();  	} @@ -444,19 +442,9 @@ S32 LLFontGL::renderUTF8(const std::string &text, S32 begin_offset, S32 x, S32 y  }  // font metrics - override for LLFontFreetype that returns units of virtual pixels -F32 LLFontGL::getLineHeight() const +S32 LLFontGL::getLineHeight() const  {  -	return (F32)llround(mFontFreetype->getLineHeight() / sScaleY);  -} - -F32 LLFontGL::getAscenderHeight() const -{  -	return (F32)llround(mFontFreetype->getAscenderHeight() / sScaleY);  -} - -F32 LLFontGL::getDescenderHeight() const -{  -	return (F32)llround(mFontFreetype->getDescenderHeight() / sScaleY);  +	return llceil(mFontFreetype->getAscenderHeight() / sScaleY) + llceil(mFontFreetype->getDescenderHeight() / sScaleY);  }  S32 LLFontGL::getWidth(const std::string& utf8text) const @@ -645,7 +633,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch  		}  		// Round after kerning. -		cur_x = llround(cur_x); +		cur_x = (F32)llround(cur_x);  		drawn_x = cur_x;  	} @@ -716,7 +704,7 @@ S32	LLFontGL::firstDrawableChar(const llwchar* wchars, F32 max_pixels, S32 text_  		}  		// Round after kerning. -		total_width = llround(total_width); +		total_width = (F32)llround(total_width);  	}  	if (drawable_chars == 0) @@ -799,7 +787,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t  		// Round after kerning. -		cur_x = llround(cur_x); +		cur_x = (F32)llround(cur_x);  	}  	return llmin(max_chars, pos - begin_offset); diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h index dc8d848ed2..9d7e2891e3 100644 --- a/indra/llrender/llfontgl.h +++ b/indra/llrender/llfontgl.h @@ -115,9 +115,7 @@ public:  	S32 renderUTF8(const std::string &text, S32 begin_offset, S32 x, S32 y, const LLColor4 &color, HAlign halign, VAlign valign, U8 style = NORMAL, ShadowType shadow = NO_SHADOW) const;  	// font metrics - override for LLFontFreetype that returns units of virtual pixels -	F32 getLineHeight() const; -	F32 getAscenderHeight() const; -	F32 getDescenderHeight() const; +	S32 getLineHeight() const;  	S32 getWidth(const std::string& utf8text) const;  	S32 getWidth(const llwchar* wchars) const; diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index f0d92d597a..705fe16559 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -908,9 +908,9 @@ void LLButton::draw()  		// Not sure if it is really needed. Probably S32_MAX should be always passed as max_chars.  		mLastDrawCharsCount = mGLFont->render(label, 0,  			(F32)x, -			(F32)(mBottomVPad + y_offset), +			(F32)(getRect().getHeight() / 2 + mBottomVPad),  			label_color % alpha, -			mHAlign, LLFontGL::BOTTOM, +			mHAlign, LLFontGL::VCENTER,  			LLFontGL::NORMAL,  			mDropShadowedText ? LLFontGL::DROP_SHADOW_SOFT : LLFontGL::NO_SHADOW,  			S32_MAX, text_width, diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp index 42e6c3c786..5f69c6af31 100644 --- a/indra/llui/lldraghandle.cpp +++ b/indra/llui/lldraghandle.cpp @@ -244,7 +244,7 @@ void LLDragHandleTop::reshapeTitleBox()  	const LLFontGL* font = LLFontGL::getFontSansSerif();  	S32 title_width = getRect().getWidth();  	title_width -= LEFT_PAD + 2 * BORDER_PAD + getButtonsRect().getWidth(); -	S32 title_height = llround(font->getLineHeight()); +	S32 title_height = font->getLineHeight();  	LLRect title_rect;  	title_rect.setLeftTopAndSize(   		LEFT_PAD,  diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 33548151fd..cef5ba3fe7 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1681,6 +1681,8 @@ LLFloater* LLFloater::getClosableFloaterFromFocus()  	{  		if (it->hasFocus())  		{ +			LLFloater& floater = *it; +			focused_floater = &floater;  			break;  		}  	} @@ -1800,7 +1802,7 @@ void LLFloater::draw()  				const LLFontGL* font = LLFontGL::getFontSansSerif();  				LLRect r = getRect(); -				gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1,  +				gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - font->getLineHeight() - 1,   					titlebar_focus_color % alpha, 0, TRUE);  			}  		} diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 2f1c2a47c9..31e0434753 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -36,7 +36,7 @@  #include "llcriticaldamp.h"  #include "boost/foreach.hpp" -static const F32 MIN_FRACTIONAL_SIZE = 0.0001f; +static const F32 MIN_FRACTIONAL_SIZE = 0.0f;  static const F32 MAX_FRACTIONAL_SIZE = 1.f;  static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack"); @@ -129,6 +129,12 @@ void LLLayoutPanel::setOrientation( LLLayoutStack::ELayoutOrientation orientatio  		? getRect().getWidth()  		: getRect().getHeight())); +	if (mAutoResize == FALSE  +		&& mUserResize == TRUE  +		&& mMinDim == -1 ) +	{ +		setMinDim(layout_dim); +	}  	mTargetDim = llmax(layout_dim, getMinDim());  } @@ -246,7 +252,7 @@ void LLLayoutStack::removeChild(LLView* view)  	{  		mPanels.erase(std::find(mPanels.begin(), mPanels.end(), embedded_panelp));  		delete embedded_panelp; -		updateFractionalSizes(); +		normalizeFractionalSizes();  		mNeedsLayout = true;  	} @@ -271,7 +277,7 @@ bool LLLayoutStack::addChild(LLView* child, S32 tab_group)  	}  	BOOL result = LLView::addChild(child, tab_group); -	updateFractionalSizes(); +	normalizeFractionalSizes();  	return result;  } @@ -306,7 +312,6 @@ void LLLayoutStack::updateLayout()  	bool animation_in_progress = animatePanels();  	F32 total_visible_fraction = 0.f; -	F32 total_open_fraction = 0.f;  	S32 space_to_distribute = (mOrientation == HORIZONTAL)  							? getRect().getWidth()  							: getRect().getHeight(); @@ -318,20 +323,17 @@ void LLLayoutStack::updateLayout()  		if (panelp->mAutoResize)  		{  			panelp->mTargetDim = panelp->getRelevantMinDim(); -			if (!panelp->mCollapsed && panelp->getVisible()) -			{ -				total_open_fraction += panelp->mFractionalSize; -			}  		}  		space_to_distribute -= panelp->getVisibleDim() + llround((F32)mPanelSpacing * panelp->getVisibleAmount()); -		total_visible_fraction += panelp->mFractionalSize; +		total_visible_fraction += panelp->mFractionalSize * panelp->getAutoResizeFactor();  	} -	llassert(total_visible_fraction < 1.01f); +	llassert(total_visible_fraction < 1.05f);  	// don't need spacing after last panel  	space_to_distribute += panelp ? llround((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0; +	S32 remaining_space = space_to_distribute;  	F32 fraction_distributed = 0.f;  	if (space_to_distribute > 0 && total_visible_fraction > 0.f)  	{	// give space proportionally to visible auto resize panels @@ -343,26 +345,23 @@ void LLLayoutStack::updateLayout()  				S32 delta = llround((F32)space_to_distribute * fraction_to_distribute);  				fraction_distributed += fraction_to_distribute;  				panelp->mTargetDim += delta; +				remaining_space -= delta;  			}  		}  	} -	if (fraction_distributed < total_visible_fraction) -	{	// distribute any left over pixels to non-collapsed, visible panels -		F32 fraction_left = total_visible_fraction - fraction_distributed; -		S32 space_left = llround((F32)space_to_distribute * (fraction_left / total_visible_fraction)); +	// distribute any left over pixels to non-collapsed, visible panels +	BOOST_FOREACH(LLLayoutPanel* panelp, mPanels) +	{ +		if (remaining_space == 0) break; -		BOOST_FOREACH(LLLayoutPanel* panelp, mPanels) +		if (panelp->mAutoResize  +			&& !panelp->mCollapsed  +			&& panelp->getVisible())  		{ -			if (panelp->mAutoResize  -				&& !panelp->mCollapsed  -				&& panelp->getVisible()) -			{ -				S32 space_for_panel = llmax(0, llround((F32)space_left * (panelp->mFractionalSize / total_open_fraction))); -				panelp->mTargetDim += space_for_panel; -				space_left -= space_for_panel; -				total_open_fraction -= panelp->mFractionalSize; -			} +			S32 space_for_panel = remaining_space > 0 ? 1 : -1; +			panelp->mTargetDim += space_for_panel; +			remaining_space -= space_for_panel;  		}  	} @@ -492,7 +491,7 @@ void LLLayoutStack::updateClass()  	}  } -void LLLayoutStack::updateFractionalSizes() +void LLLayoutStack::normalizeFractionalSizes()  {  	F32 total_resizable_dim = 0;  	S32 num_auto_resize_panels = 0; @@ -691,7 +690,9 @@ void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect&  		case BEFORE_RESIZED_PANEL:  			if (panelp->mAutoResize)  			{	// freeze current size as fraction of overall auto_resize space -				F32 fractional_adjustment_factor = total_auto_resize_headroom / updated_auto_resize_headroom; +				F32 fractional_adjustment_factor = updated_auto_resize_headroom == 0.f +													? 1.f +													: total_auto_resize_headroom / updated_auto_resize_headroom;  				F32 new_fractional_size = llclamp(panelp->mFractionalSize * fractional_adjustment_factor,  													MIN_FRACTIONAL_SIZE,  													MAX_FRACTIONAL_SIZE); @@ -711,7 +712,7 @@ void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect&  			{	// freeze new size as fraction  				F32 new_fractional_size = (updated_auto_resize_headroom == 0.f)  					? MAX_FRACTIONAL_SIZE -					: llclamp((F32)(new_dim - panelp->getRelevantMinDim()) / updated_auto_resize_headroom, MIN_FRACTIONAL_SIZE, MAX_FRACTIONAL_SIZE); +					: llclamp(total_visible_fraction * (F32)(new_dim - panelp->getRelevantMinDim()) / updated_auto_resize_headroom, MIN_FRACTIONAL_SIZE, MAX_FRACTIONAL_SIZE);  				fraction_given_up -= new_fractional_size - panelp->mFractionalSize;  				fraction_remaining -= panelp->mFractionalSize;  				panelp->mFractionalSize = new_fractional_size; @@ -720,7 +721,6 @@ void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect&  			else  			{	// freeze new size as original size  				panelp->mTargetDim = new_dim; -				fraction_remaining -= fraction_given_up;  			}  			which_panel = NEXT_PANEL;  			break; @@ -728,14 +728,14 @@ void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect&  			if (panelp->mAutoResize)  			{  				fraction_remaining -= panelp->mFractionalSize; -				if (fraction_given_up != 0.f) +				if (resized_panel->mAutoResize)  				{  					panelp->mFractionalSize = llclamp(panelp->mFractionalSize + fraction_given_up, MIN_FRACTIONAL_SIZE, MAX_FRACTIONAL_SIZE);  					fraction_given_up = 0.f;  				}  				else  				{ -					F32 new_fractional_size = llclamp((F32)(panelp->mTargetDim - panelp->getRelevantMinDim() + delta_auto_resize_headroom)  +					F32 new_fractional_size = llclamp(total_visible_fraction * (F32)(panelp->mTargetDim - panelp->getRelevantMinDim() + delta_auto_resize_headroom)   														/ updated_auto_resize_headroom,  													MIN_FRACTIONAL_SIZE,  													MAX_FRACTIONAL_SIZE); @@ -750,7 +750,7 @@ void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect&  			which_panel = AFTER_RESIZED_PANEL;  			break;  		case AFTER_RESIZED_PANEL: -			if (panelp->mAutoResize) +			if (panelp->mAutoResize && fraction_given_up != 0.f)  			{  				panelp->mFractionalSize = llclamp(panelp->mFractionalSize + (panelp->mFractionalSize / fraction_remaining) * fraction_given_up,  												MIN_FRACTIONAL_SIZE, @@ -760,6 +760,8 @@ void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect&  			break;  		}  	} +	updateLayout(); +	normalizeFractionalSizes();  }  void LLLayoutStack::reshape(S32 width, S32 height, BOOL called_from_parent) diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index efe93f6def..4a8702e318 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -72,7 +72,7 @@ public:  	/*virtual*/ void draw();  	/*virtual*/ void removeChild(LLView*);  	/*virtual*/ BOOL postBuild(); -	/*virtual*/ bool addChild(LLView* child, S32 tab_group = 0); +	/*virtual*/ bool addChild(LLView* child, S32 tab_groupdatefractuiona = 0);  	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); @@ -111,7 +111,7 @@ private:  	LLLayoutPanel* findEmbeddedPanel(LLPanel* panelp) const;  	LLLayoutPanel* findEmbeddedPanelByName(const std::string& name) const; -	void updateFractionalSizes(); +	void normalizeFractionalSizes();  	void updatePanelRect( LLLayoutPanel* param1, const LLRect& new_rect );  	S32 mPanelSpacing; @@ -154,10 +154,10 @@ public:  	void setVisible(BOOL visible);  	S32 getLayoutDim() const; -	S32 getMinDim() const { return (mMinDim >= 0 || mAutoResize) ? llmax(0, mMinDim) : getLayoutDim(); } +	S32 getMinDim() const { return llmax(0, mMinDim); }  	void setMinDim(S32 value) { mMinDim = value; } -	S32 getExpandedMinDim() const { return mExpandedMinDim >= 0 ? mExpandedMinDim : mMinDim; } +	S32 getExpandedMinDim() const { return mExpandedMinDim >= 0 ? mExpandedMinDim : getMinDim(); }  	void setExpandedMinDim(S32 value) { mExpandedMinDim = value; }  	S32 getRelevantMinDim() const diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 06dfc90d83..7e84814c51 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -1630,7 +1630,7 @@ void LLLineEditor::draw()  	LLRect background( 0, getRect().getHeight(), getRect().getWidth(), 0 );  	background.stretch( -mBorderThickness ); -	S32 lineeditor_v_pad = llround((background.getHeight() - mGLFont->getLineHeight())/2); +	S32 lineeditor_v_pad = (background.getHeight() - mGLFont->getLineHeight()) / 2;  	drawBackground(); diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 95ecbb1c94..3e547efd97 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -317,7 +317,7 @@ void LLMenuItemGL::setJumpKey(KEY key)  // virtual   U32 LLMenuItemGL::getNominalHeight( void ) const   {  -	return llround(mFont->getLineHeight()) + MENU_ITEM_PADDING;  +	return mFont->getLineHeight() + MENU_ITEM_PADDING;  }  //virtual @@ -508,19 +508,19 @@ void LLMenuItemGL::draw( void )  	{  		if( !mDrawBoolLabel.empty() )  		{ -			mFont->render( mDrawBoolLabel.getWString(), 0, (F32)LEFT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color, +			mFont->render( mDrawBoolLabel.getWString(), 0, (F32)LEFT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f), color,  						   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );  		} -		mFont->render( mLabel.getWString(), 0, (F32)LEFT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color, +		mFont->render( mLabel.getWString(), 0, (F32)LEFT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f), color,  					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );  		if( !mDrawAccelLabel.empty() )  		{ -			mFont->render( mDrawAccelLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color, +			mFont->render( mDrawAccelLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f), color,  						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );  		}  		if( !mDrawBranchLabel.empty() )  		{ -			mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color, +			mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f), color,  						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );  		}  	} @@ -1966,7 +1966,7 @@ void LLMenuGL::arrange( void )  		// *FIX: create the item first and then ask for its dimensions?  		S32 spillover_item_width = PLAIN_PAD_PIXELS + LLFontGL::getFontSansSerif()->getWidth( std::string("More") ); // *TODO: Translate -		S32 spillover_item_height = llround(LLFontGL::getFontSansSerif()->getLineHeight()) + MENU_ITEM_PADDING; +		S32 spillover_item_height = LLFontGL::getFontSansSerif()->getLineHeight() + MENU_ITEM_PADDING;  		// Scrolling support  		item_list_t::iterator first_visible_item_iter; diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index d232e27ef2..8aa548b974 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1412,6 +1412,7 @@ void addPathIfExists(const std::string& new_path, std::vector<std::string>& path  bool LLNotifications::loadTemplates()  { +	llinfos << "Reading notifications template" << llendl;  	std::vector<std::string> search_paths;  	std::string skin_relative_path = gDirUtilp->getDirDelimiter() + LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + "notifications.xml"; @@ -1484,6 +1485,8 @@ bool LLNotifications::loadTemplates()  		mTemplates[notification.name] = LLNotificationTemplatePtr(new LLNotificationTemplate(notification));  	} +	llinfos << "...done" << llendl; +  	return true;  } diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp index ad4cc20d9a..20bed050ad 100644 --- a/indra/llui/llscrollcontainer.cpp +++ b/indra/llui/llscrollcontainer.cpp @@ -378,23 +378,21 @@ void LLScrollContainer::calcVisibleSize( S32 *visible_width, S32 *visible_height  	if (!mHideScrollbar)  	{ -		if( *visible_height < doc_height ) +		// Note: 1 pixel change can happen on final animation and should not trigger  +		// the display of sliders. +		if ((doc_height - *visible_height) > 1)  		{  			*show_v_scrollbar = TRUE;  			*visible_width -= scrollbar_size;  		} - -		if( *visible_width < doc_width ) +		if ((doc_width - *visible_width) > 1)  		{  			*show_h_scrollbar = TRUE;  			*visible_height -= scrollbar_size; - -			// Must retest now that visible_height has changed -			if( !*show_v_scrollbar && (*visible_height < doc_height) ) -			{ -				*show_v_scrollbar = TRUE; -				*visible_width -= scrollbar_size; -			} +			// Note: Do *not* recompute *show_v_scrollbar here because with +			// the (- scrollbar_size) we just did we will always add a vertical scrollbar +			// even if the height of the items is actually less than the visible size. +			// Fear not though: there's enough calcVisibleSize() calls to add a vertical slider later.  		}  	}  } diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp index 9d25c7180d..8000efad0e 100644 --- a/indra/llui/llscrolllistcell.cpp +++ b/indra/llui/llscrolllistcell.cpp @@ -232,7 +232,7 @@ BOOL LLScrollListText::getVisible() const  //virtual   S32 LLScrollListText::getHeight() const  { -	return llround(mFont->getLineHeight()); +	return mFont->getLineHeight();  } @@ -306,7 +306,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col  			break;  		}  		LLRect highlight_rect(left - 2,  -				llround(mFont->getLineHeight()) + 1,  +				mFont->getLineHeight() + 1,   				left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1,   				1);  		mRoundedRectImage->draw(highlight_rect, highlight_color); @@ -329,7 +329,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col  		break;  	}  	mFont->render(mText.getWString(), 0,  -					start_x, 2.f, +					start_x, 0.f,  					display_color,  					mFontAlignment,  					LLFontGL::BOTTOM,  diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 0040be45c7..5fe90e1ee3 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2157,7 +2157,7 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const  	{   		// return default height rect in upper left  		local_rect = content_window_rect; -		local_rect.mBottom = local_rect.mTop - (S32)(mDefaultFont->getLineHeight()); +		local_rect.mBottom = local_rect.mTop - mDefaultFont->getLineHeight();  		return local_rect;  	} @@ -2395,10 +2395,21 @@ void LLTextBase::updateRects()  		}  		mTextBoundingRect.mTop += mVPad; -		// subtract a pixel off the bottom to deal with rounding errors in measuring font height -		mTextBoundingRect.mBottom -= 1; -		S32 delta_pos = -mTextBoundingRect.mBottom; +		S32 delta_pos = 0; +		 +		switch(mVAlign) +		{ +		case LLFontGL::TOP: +			delta_pos = llmax(mVisibleTextRect.mTop - mTextBoundingRect.mTop, -mTextBoundingRect.mBottom); +			break; +		case LLFontGL::VCENTER: +			delta_pos = (llmax(mVisibleTextRect.mTop - mTextBoundingRect.mTop, -mTextBoundingRect.mBottom) + (mVisibleTextRect.mBottom - mTextBoundingRect.mBottom)) / 2; +			break; +		case LLFontGL::BOTTOM: +			delta_pos = mVisibleTextRect.mBottom - mTextBoundingRect.mBottom; +			break; +		}  		// move line segments to fit new document rect  		for (line_list_t::iterator it = mLineInfoList.begin(); it != mLineInfoList.end(); ++it)  		{ @@ -2408,8 +2419,9 @@ void LLTextBase::updateRects()  	}  	// update document container dimensions according to text contents -	LLRect doc_rect = mTextBoundingRect; +	LLRect doc_rect;  	// use old mVisibleTextRect constraint document to width of viewable region +	doc_rect.mBottom = llmin(mVisibleTextRect.mBottom,  mTextBoundingRect.mBottom);  	doc_rect.mLeft = 0;  	// allow horizontal scrolling? @@ -2419,11 +2431,22 @@ void LLTextBase::updateRects()  	doc_rect.mRight = mScroller   		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)  		: mVisibleTextRect.getWidth(); +	doc_rect.mTop = llmax(mVisibleTextRect.mTop, mTextBoundingRect.mTop);  	if (!mScroller)  	{  		// push doc rect to top of text widget -		doc_rect.translate(0, mVisibleTextRect.getHeight() - doc_rect.mTop); +		switch(mVAlign) +		{ +		case LLFontGL::TOP: +			doc_rect.translate(0, mVisibleTextRect.getHeight() - doc_rect.mTop); +			break; +		case LLFontGL::VCENTER: +			doc_rect.translate(0, (mVisibleTextRect.getHeight() - doc_rect.mTop) / 2); +		case LLFontGL::BOTTOM: +		default: +			break; +		}  	}  	mDocumentView->setShape(doc_rect); @@ -2444,9 +2467,27 @@ void LLTextBase::updateRects()  	}  	// update document container again, using new mVisibleTextRect (that has scrollbars enabled as needed) +	doc_rect.mBottom = llmin(mVisibleTextRect.mBottom,  mTextBoundingRect.mBottom); +	doc_rect.mLeft = 0;  	doc_rect.mRight = mScroller   		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)  		: mVisibleTextRect.getWidth(); +	doc_rect.mTop = llmax(mVisibleTextRect.mTop, mTextBoundingRect.mTop); +	if (!mScroller) +	{ +		// push doc rect to top of text widget +		switch(mVAlign) +		{ +		case LLFontGL::TOP: +			doc_rect.translate(0, mVisibleTextRect.getHeight() - doc_rect.mTop); +			break; +		case LLFontGL::VCENTER: +			doc_rect.translate(0, (mVisibleTextRect.getHeight() - doc_rect.mTop) / 2); +		case LLFontGL::BOTTOM: +		default: +			break; +		} +	}  	mDocumentView->setShape(doc_rect);  } @@ -2578,7 +2619,7 @@ LLNormalTextSegment::LLNormalTextSegment( LLStyleConstSP style, S32 start, S32 e  	mToken(NULL),  	mEditor(editor)  { -	mFontHeight = llceil(mStyle->getFont()->getLineHeight()); +	mFontHeight = mStyle->getFont()->getLineHeight();  	LLUIImagePtr image = mStyle->getImage();  	if (image.notNull()) @@ -2594,7 +2635,7 @@ LLNormalTextSegment::LLNormalTextSegment( const LLColor4& color, S32 start, S32  {  	mStyle = new LLStyle(LLStyle::Params().visible(is_visible).color(color)); -	mFontHeight = llceil(mStyle->getFont()->getLineHeight()); +	mFontHeight = mStyle->getFont()->getLineHeight();  }  LLNormalTextSegment::~LLNormalTextSegment() @@ -2962,11 +3003,11 @@ LLLineBreakTextSegment::LLLineBreakTextSegment(S32 pos):LLTextSegment(pos,pos+1)  {  	LLStyleSP s( new LLStyle(LLStyle::Params().visible(true))); -	mFontHeight = llceil(s->getFont()->getLineHeight()); +	mFontHeight = s->getFont()->getLineHeight();  }  LLLineBreakTextSegment::LLLineBreakTextSegment(LLStyleConstSP style,S32 pos):LLTextSegment(pos,pos+1)  { -	mFontHeight = llceil(style->getFont()->getLineHeight()); +	mFontHeight = style->getFont()->getLineHeight();  }  LLLineBreakTextSegment::~LLLineBreakTextSegment()  { @@ -3003,7 +3044,7 @@ static const S32 IMAGE_HPAD = 3;  bool LLImageTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const  {  	width = 0; -	height = llceil(mStyle->getFont()->getLineHeight());; +	height = mStyle->getFont()->getLineHeight();  	LLUIImagePtr image = mStyle->getImage();  	if( num_chars>0 && image.notNull()) diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 3a23ce1cac..3409b6817d 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -1992,7 +1992,7 @@ void LLTextEditor::drawPreeditMarker()  		return;  	} -	const S32 line_height = llround( mDefaultFont->getLineHeight() ); +	const S32 line_height = mDefaultFont->getLineHeight();  	S32 line_start = getLineStart(cur_line);  	S32 line_y = mVisibleTextRect.mTop - line_height; @@ -2715,7 +2715,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect      const LLWString textString(getWText());  	const llwchar * const text = textString.c_str(); -	const S32 line_height = llround(mDefaultFont->getLineHeight()); +	const S32 line_height = mDefaultFont->getLineHeight();  	if (coord)  	{ @@ -2818,7 +2818,7 @@ void LLTextEditor::markAsPreedit(S32 position, S32 length)  S32 LLTextEditor::getPreeditFontSize() const  { -	return llround(mDefaultFont->getLineHeight() * LLUI::sGLScaleFactor.mV[VY]); +	return llround((F32)mDefaultFont->getLineHeight() * LLUI::sGLScaleFactor.mV[VY]);  }  BOOL LLTextEditor::isDirty() const diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 23cdd9ad9a..f737d48abf 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -180,6 +180,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  	params.font = p.font;  	params.use_ellipses = true;  	params.wrap = p.wrap; +	params.font_valign = LLFontGL::VCENTER;  	params.parse_urls = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips  	mTextBox = LLUICtrlFactory::create<LLTextBox> (params);  	addChild(mTextBox); @@ -190,7 +191,6 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  	{  		LLButton::Params icon_params;  		icon_params.name = "tooltip_info"; -		icon_params.label(""); // provid label but set to empty so name does not overwrite it -angela  		LLRect icon_rect;  		LLUIImage* imagep = p.image;  		TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16); @@ -291,6 +291,12 @@ void LLToolTip::initFromParams(const LLToolTip::Params& p)  	S32 text_width = llmin(p.max_width(), mTextBox->getTextPixelWidth());  	S32 text_height = mTextBox->getTextPixelHeight();  	mTextBox->reshape(text_width, text_height); +	if (mInfoButton) +	{ +		LLRect text_rect = mTextBox->getRect(); +		LLRect icon_rect = mInfoButton->getRect(); +		mTextBox->translate(0, icon_rect.getCenterY() - text_rect.getCenterY()); +	}  	// reshape tooltip panel to fit text box  	LLRect tooltip_rect = calcBoundingRect(); @@ -299,6 +305,8 @@ void LLToolTip::initFromParams(const LLToolTip::Params& p)  	tooltip_rect.mBottom = 0;  	tooltip_rect.mLeft = 0; +	mTextBox->reshape(mTextBox->getRect().getWidth(), llmax(mTextBox->getRect().getHeight(), tooltip_rect.getHeight() - 2 * mPadding)); +  	setShape(tooltip_rect);  } diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp index ac69d3bf85..c4e073ccdb 100644 --- a/indra/llui/lluistring.cpp +++ b/indra/llui/lluistring.cpp @@ -128,17 +128,13 @@ void LLUIString::updateResult() const  	}  	mResult = mOrig; -	// get the defailt args + local args -	if (!mArgs || mArgs->empty()) +	// get the default args + local args +	LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs(); +	if (mArgs && !mArgs->empty())  	{ -		LLStringUtil::format(mResult, LLTrans::getDefaultArgs()); -	} -	else -	{ -		LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();  		combined_args.insert(mArgs->begin(), mArgs->end()); -		LLStringUtil::format(mResult, combined_args);  	} +	LLStringUtil::format(mResult, combined_args);  }  void LLUIString::updateWResult() const diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp index 3d3ed9f6d4..073b1af2a1 100644 --- a/indra/llvfs/lllfsthread.cpp +++ b/indra/llvfs/lllfsthread.cpp @@ -45,7 +45,7 @@ void LLLFSThread::initClass(bool local_is_threaded)  //static  S32 LLLFSThread::updateClass(U32 ms_elapsed)  { -	sLocal->update(ms_elapsed); +	sLocal->update((F32)ms_elapsed);  	return sLocal->getPending();  } diff --git a/indra/llvfs/llvfsthread.cpp b/indra/llvfs/llvfsthread.cpp index 254f8b55ba..a57e2b15ab 100644 --- a/indra/llvfs/llvfsthread.cpp +++ b/indra/llvfs/llvfsthread.cpp @@ -46,7 +46,7 @@ void LLVFSThread::initClass(bool local_is_threaded)  //static  S32 LLVFSThread::updateClass(U32 ms_elapsed)  { -	sLocal->update(ms_elapsed); +	sLocal->update((F32)ms_elapsed);  	return sLocal->getPending();  } diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 228fbefd19..67d1a168e6 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1065,6 +1065,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  		return FALSE;  	} +	LL_INFOS("Window") << "Device context retrieved." << llendl ; +  	if (!(pixel_format = ChoosePixelFormat(mhDC, &pfd)))  	{  		close(); @@ -1073,6 +1075,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  		return FALSE;  	} +	LL_INFOS("Window") << "Pixel format chosen." << llendl ; +  	// Verify what pixel format we actually received.  	if (!DescribePixelFormat(mhDC, pixel_format, sizeof(PIXELFORMATDESCRIPTOR),  		&pfd)) diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h index bf38a8b062..597031ec70 100644 --- a/indra/llxml/llcontrol.h +++ b/indra/llxml/llcontrol.h @@ -92,6 +92,8 @@ typedef enum e_control_type  class LLControlVariable : public LLRefCount  { +	LOG_CLASS(LLControlVariable); +  	friend class LLControlGroup;  public: @@ -180,6 +182,8 @@ T convert_from_llsd(const LLSD& sd, eControlType type, const std::string& contro  //const U32 STRING_CACHE_SIZE = 10000;  class LLControlGroup : public LLInstanceTracker<LLControlGroup, std::string>  { +	LOG_CLASS(LLControlGroup); +  protected:  	typedef std::map<std::string, LLControlVariablePtr > ctrl_name_table_t;  	ctrl_name_table_t mNameTable; diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp index 2b4a0fc2a1..2ffb0d8503 100644 --- a/indra/llxml/llxmlnode.cpp +++ b/indra/llxml/llxmlnode.cpp @@ -631,13 +631,14 @@ bool LLXMLNode::updateNode(  	}  	//update all of node's children with updateNodes children that match name -	LLXMLNodePtr child; +	LLXMLNodePtr child = node->getFirstChild(); +	LLXMLNodePtr last_child = child;  	LLXMLNodePtr updateChild;  	for (updateChild = update_node->getFirstChild(); updateChild.notNull();   		 updateChild = updateChild->getNextSibling())  	{ -		for (child = node->getFirstChild(); child.notNull(); child = child->getNextSibling()) +		while(child.notNull())  		{  			std::string nodeName;  			std::string updateName; @@ -656,6 +657,22 @@ bool LLXMLNode::updateNode(  			if ((nodeName != "") && (updateName == nodeName))  			{  				updateNode(child, updateChild); +				last_child = child; +				child = child->getNextSibling(); +				if (child.isNull()) +				{ +					child = node->getFirstChild(); +				} +				break; +			} +			 +			child = child->getNextSibling(); +			if (child.isNull()) +			{ +				child = node->getFirstChild(); +			} +			if (child == last_child) +			{  				break;  			}  		} @@ -784,7 +801,7 @@ bool LLXMLNode::parseStream(  	while(str.good())  	{  		str.read((char*)buffer, BUFSIZE); -		int count = str.gcount(); +		int count = (int)str.gcount();  		if (XML_Parse(my_parser, (const char *)buffer, count, !str.good()) != XML_STATUS_OK)  		{ @@ -882,11 +899,8 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,  	for (itor = paths.begin(), ++itor; itor != paths.end(); ++itor)  	{ -		std::string nodeName; -		std::string updateName; -  		std::string layer_filename = *itor; -		if(layer_filename.empty()) +		if(layer_filename.empty() || layer_filename == filename)  		{  			// no localized version of this file, that's ok, keep looking  			continue; @@ -898,6 +912,9 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,  			return false;  		} +		std::string nodeName; +		std::string updateName; +  		updateRoot->getAttributeString("name", updateName);  		root->getAttributeString("name", nodeName); diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index ab20957760..4ab1d891a3 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -1253,15 +1253,16 @@ namespace LLInitParam  			return mValues.back();  		} -		void add(const value_t& item) +		self_t& add(const value_t& item)  		{  			param_value_t param_value;  			param_value.setValue(item);  			mValues.push_back(param_value);  			setProvided(); +			return *this;  		} -		void add(const typename name_value_lookup_t::name_t& name) +		self_t& add(const typename name_value_lookup_t::name_t& name)  		{  			value_t value; @@ -1271,6 +1272,8 @@ namespace LLInitParam  				add(value);  				mValues.back().setValueName(name);  			} + +			return *this;  		}  		// implicit conversion @@ -1441,13 +1444,14 @@ namespace LLInitParam  			return mValues.back();  		} -		void add(const value_t& item) +		self_t& add(const value_t& item)  		{  			mValues.push_back(item);  			setProvided(); +			return *this;  		} -		void add(const typename name_value_lookup_t::name_t& name) +		self_t& add(const typename name_value_lookup_t::name_t& name)  		{  			value_t value; @@ -1457,6 +1461,7 @@ namespace LLInitParam  				add(value);  				mValues.back().setValueName(name);  			} +			return *this;  		}  		// implicit conversion diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index 999f754dcf..24328202cb 100644 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -705,7 +705,7 @@ private:  		// look up "Display Name" in meta data  		OSType meta_data_key = kQTMetaDataCommonKeyDisplayName;  		QTMetaDataItem item = kQTMetaDataItemUninitialized; -		result = QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard,  +		result = (OSErr)QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard,   										0, kQTMetaDataKeyFormatCommon,   										(const UInt8 *)&meta_data_key,   										sizeof( meta_data_key ), &item ); @@ -714,14 +714,14 @@ private:  		// find the size of the title  		ByteCount size; -		result = QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size ); +		result = (OSErr)QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size );  		if ( noErr != result || size <= 0 /*|| size > 1024  FIXME: arbitrary limit */ )   			return false;  		// allocate some space and grab it  		UInt8* item_data = new UInt8[ size + 1 ];  		memset( item_data, 0, ( size + 1 ) * sizeof( UInt8 ) ); -		result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL ); +		result = (OSErr)QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );  		if ( noErr != result )   		{  			delete [] item_data; diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 47f8dcd545..1812abd7d5 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -991,7 +991,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  		{  			if(message_name == "set_volume")  			{ -				F32 volume = message_in.getValueReal("volume"); +				F32 volume = (F32)message_in.getValueReal("volume");  				setVolume(volume);  			}  		} @@ -1057,9 +1057,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  				S32 height = message_in.getValueS32("height");  				S32 texture_width = message_in.getValueS32("texture_width");  				S32 texture_height = message_in.getValueS32("texture_height"); -				mBackgroundR = message_in.getValueReal("background_r"); -				mBackgroundG = message_in.getValueReal("background_g"); -				mBackgroundB = message_in.getValueReal("background_b"); +				mBackgroundR = (F32)message_in.getValueReal("background_r"); +				mBackgroundG = (F32)message_in.getValueReal("background_g"); +				mBackgroundB = (F32)message_in.getValueReal("background_b");  //				mBackgroundA = message_in.setValueReal("background_a");		// Ignore any alpha  				if(!name.empty()) @@ -1245,9 +1245,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  			if(message_name == "js_agent_location")  			{  #if LLQTWEBKIT_API_VERSION >= 9 -				F32 x = message_in.getValueReal("x"); -				F32 y = message_in.getValueReal("y"); -				F32 z = message_in.getValueReal("z"); +				F32 x = (F32)message_in.getValueReal("x"); +				F32 y = (F32)message_in.getValueReal("y"); +				F32 z = (F32)message_in.getValueReal("z");  				LLQtWebKit::getInstance()->setAgentLocation( x, y, z );  				LLQtWebKit::getInstance()->emitLocation();  #endif @@ -1256,9 +1256,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  			if(message_name == "js_agent_global_location")  			{  #if LLQTWEBKIT_API_VERSION >= 9 -				F32 x = message_in.getValueReal("x"); -				F32 y = message_in.getValueReal("y"); -				F32 z = message_in.getValueReal("z"); +				F32 x = (F32)message_in.getValueReal("x"); +				F32 y = (F32)message_in.getValueReal("y"); +				F32 z = (F32)message_in.getValueReal("z");  				LLQtWebKit::getInstance()->setAgentGlobalLocation( x, y, z );  				LLQtWebKit::getInstance()->emitLocation();  #endif @@ -1267,7 +1267,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  			if(message_name == "js_agent_orientation")  			{  #if LLQTWEBKIT_API_VERSION >= 9 -				F32 angle = message_in.getValueReal("angle"); +				F32 angle = (F32)message_in.getValueReal("angle");  				LLQtWebKit::getInstance()->setAgentOrientation( angle );  				LLQtWebKit::getInstance()->emitLocation();  #endif @@ -1323,7 +1323,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)  			else if(message_name == "set_page_zoom_factor")  			{  #if LLQTWEBKIT_API_VERSION >= 15 -				F32 factor = message_in.getValueReal("factor"); +				F32 factor = (F32)message_in.getValueReal("factor");  				LLQtWebKit::getInstance()->setPageZoomFactor(factor);  #else  				llwarns << "Ignoring setPageZoomFactor message (llqtwebkit version is too old)." << llendl; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index f85b943c70..69bf1f15a1 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1345,7 +1345,9 @@ if (WINDOWS)          DXGUID_LIBRARY          ) +# see EXP-1765 - theory is opengl32.lib needs to be included before gdi32.lib (windows libs)      set(viewer_LIBRARIES +        opengl32          ${WINDOWS_LIBRARIES}          comdlg32          ${DINPUT_LIBRARY} @@ -1355,7 +1357,6 @@ if (WINDOWS)          odbccp32          ole32          oleaut32 -        opengl32          shell32          Vfw32          winspool diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 0e26013152..ee8c15752b 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4282,6 +4282,17 @@          <key>Value</key>          <integer>0</integer>      </map> +    <key>InventoryInboxToggleState</key> +    <map> +        <key>Comment</key> +        <string>Stores the open/closed state of inventory Received items panel</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map>  	<key>InventoryLinking</key>  	<map>  		<key>Comment</key> diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 09305a5b4d..dd02a74a38 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -817,7 +817,10 @@ void LLAgentWearables::popWearable(const LLWearableType::EType type, U32 index)  	if (wearable)  	{  		mWearableDatas[type].erase(mWearableDatas[type].begin() + index); +		if (isAgentAvatarValid()) +		{  		gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE); +		}  		wearable->setLabelUpdated();  	}  } diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index e3217668c5..f2375bfa4f 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -188,7 +188,7 @@ void LLCallFloater::draw()  	// Need to resort the participant list if it's in sort by recent speaker order.  	if (mParticipants) -		mParticipants->updateRecentSpeakersOrder(); +		mParticipants->update();  	LLFloater::draw();  } @@ -333,6 +333,7 @@ void LLCallFloater::refreshParticipantList()  	if (!non_avatar_caller)  	{ +		llassert(mParticipants == NULL); // check for possible memory leak  		mParticipants = new LLParticipantList(mSpeakerManager, mAvatarList, true, mVoiceType != VC_GROUP_CHAT && mVoiceType != VC_AD_HOC_CHAT, false);  		mParticipants->setValidateSpeakerCallback(boost::bind(&LLCallFloater::validateSpeaker, this, _1));  		const U32 speaker_sort_order = gSavedSettings.getU32("SpeakerParticipantDefaultOrder"); diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 2abfbf37ca..935dcb74b0 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -55,7 +55,7 @@ public:  		else  		{  			width = mEditor.getDocumentView()->getRect().getWidth() - mEditor.getHPad();  -			height = llceil(mStyle->getFont()->getLineHeight()); +			height = mStyle->getFont()->getLineHeight();  		}  		return true;  	} diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 233038daba..9664aa7dbe 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -149,7 +149,7 @@ BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask)  LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y)  { -	S32 idx = (getRect().getHeight() - y) / ((S32) LLFontGL::getFontMonospace()->getLineHeight()+2) - 5; +	S32 idx = (getRect().getHeight() - y) / (LLFontGL::getFontMonospace()->getLineHeight()+2) - 5;  	if (idx >= 0 && idx < (S32)ft_display_idx.size())  	{ @@ -552,7 +552,7 @@ void LLFastTimerView::draw()  	// update rectangle that includes timer bars  	mBarRect.mLeft = xleft;  	mBarRect.mRight = getRect().getWidth(); -	mBarRect.mTop = ytop - ((S32)LLFontGL::getFontMonospace()->getLineHeight() + 4); +	mBarRect.mTop = ytop - (LLFontGL::getFontMonospace()->getLineHeight() + 4);  	mBarRect.mBottom = margin + LINE_GRAPH_HEIGHT;  	y = ytop; @@ -846,7 +846,7 @@ void LLFastTimerView::draw()  				tdesc = llformat("%4.2f ms", ms);  			x = mGraphRect.mRight - LLFontGL::getFontMonospace()->getWidth(tdesc)-5; -			y = mGraphRect.mTop - ((S32)LLFontGL::getFontMonospace()->getLineHeight()); +			y = mGraphRect.mTop - LLFontGL::getFontMonospace()->getLineHeight();  			LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, LLColor4::white,  										 LLFontGL::LEFT, LLFontGL::TOP); diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index 8024755e86..360e35f6d3 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -1073,8 +1073,11 @@ void LLFilePicker::chooser_responder(GtkWidget *widget, gint response, gpointer  	}  	// set the default path for this usage context. -	picker->mContextToPathMap[picker->mCurContextName] = -		gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(widget)); +	const char* cur_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(widget)); +	if (cur_folder != NULL) +	{ +		picker->mContextToPathMap[picker->mCurContextName] = cur_folder; +	}  	gtk_widget_destroy(widget);  	gtk_main_quit(); diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h index f1ffb6547f..b7854c5697 100644 --- a/indra/newview/llfloateranimpreview.h +++ b/indra/newview/llfloateranimpreview.h @@ -32,6 +32,7 @@  #include "lldynamictexture.h"  #include "llcharacter.h"  #include "llquaternion.h" +#include "llextendedstatus.h"  class LLVOAvatar;  class LLViewerJointMesh; diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp index 86c1bf0534..1b65d8d683 100644 --- a/indra/newview/llfloaterbuildoptions.cpp +++ b/indra/newview/llfloaterbuildoptions.cpp @@ -41,13 +41,9 @@  // Methods  // -void commit_grid_mode(LLUICtrl *); -  LLFloaterBuildOptions::LLFloaterBuildOptions(const LLSD& key) -  : LLFloater(key), -    mComboGridMode(NULL) +  : LLFloater(key)  { -	mCommitCallbackRegistrar.add("GridOptions.gridMode", boost::bind(&commit_grid_mode,_1));  }  LLFloaterBuildOptions::~LLFloaterBuildOptions() @@ -55,45 +51,9 @@ LLFloaterBuildOptions::~LLFloaterBuildOptions()  BOOL LLFloaterBuildOptions::postBuild()  { -	mComboGridMode = getChild<LLComboBox>("combobox grid mode"); -  	return TRUE;  } -void LLFloaterBuildOptions::setGridMode(EGridMode mode) -{ -	mComboGridMode->setCurrentByIndex((S32)mode); -} - -void LLFloaterBuildOptions::updateGridMode() -{ -	if (mComboGridMode) -	{ -		S32 index = mComboGridMode->getCurrentIndex(); -		mComboGridMode->removeall(); - -		switch (mObjectSelection->getSelectType()) -		{ -		case SELECT_TYPE_HUD: -		  mComboGridMode->add(getString("grid_screen_text")); -		  mComboGridMode->add(getString("grid_local_text")); -		  break; -		case SELECT_TYPE_WORLD: -		  mComboGridMode->add(getString("grid_world_text")); -		  mComboGridMode->add(getString("grid_local_text")); -		  mComboGridMode->add(getString("grid_reference_text")); -		  break; -		case SELECT_TYPE_ATTACHMENT: -		  mComboGridMode->add(getString("grid_attachment_text")); -		  mComboGridMode->add(getString("grid_local_text")); -		  mComboGridMode->add(getString("grid_reference_text")); -		  break; -		} - -		mComboGridMode->setCurrentByIndex(index); -	} -} -  // virtual  void LLFloaterBuildOptions::onOpen(const LLSD& key)  { @@ -105,10 +65,3 @@ void LLFloaterBuildOptions::onClose(bool app_quitting)  {  	mObjectSelection = NULL;  } - -void commit_grid_mode(LLUICtrl *ctrl) -{ -	LLComboBox* combo = (LLComboBox*)ctrl; - -	LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex()); -} diff --git a/indra/newview/llfloaterbuildoptions.h b/indra/newview/llfloaterbuildoptions.h index 7f3811bf1c..02c56cb6a9 100644 --- a/indra/newview/llfloaterbuildoptions.h +++ b/indra/newview/llfloaterbuildoptions.h @@ -35,7 +35,6 @@  #include "llfloater.h"  #include "llselectmgr.h" -class LLComboBox;  class LLObjectSelection;  typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle; @@ -44,23 +43,17 @@ class LLFloaterBuildOptions  	:	public LLFloater  {  public: -  	virtual BOOL postBuild();  	/*virtual*/ void onOpen(const LLSD& key);  	/*virtual*/	void onClose(bool app_quitting); -	void setGridMode(EGridMode mode); -	void updateGridMode(); -  private: -  	friend class LLFloaterReg;  	LLFloaterBuildOptions(const LLSD& key);  	~LLFloaterBuildOptions(); -	LLComboBox*	mComboGridMode;  	LLObjectSelectionHandle	mObjectSelection;  };  #endif diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 895e16adef..4f2a6ec1b7 100644 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -312,3 +312,9 @@ bool LLFloaterMediaSettings::haveValuesChanged() const  	return values_changed;  } +bool LLFloaterMediaSettings::instanceExists() +{ +	return LLFloaterReg::findTypedInstance<LLFloaterMediaSettings>("media_settings"); +} + + diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h index ecc55d2cbc..1d25530986 100644 --- a/indra/newview/llfloatermediasettings.h +++ b/indra/newview/llfloatermediasettings.h @@ -45,6 +45,7 @@ public:  	/*virtual*/ void onClose(bool app_quitting);  	static LLFloaterMediaSettings* getInstance(); +	static bool instanceExists();  	static void apply();  	static void initValues( const LLSD& media_settings , bool editable);  	static void clearValues( bool editable); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index a333989e7e..173b0e538c 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -741,7 +741,8 @@ void LLFloaterPreference::onClose(bool app_quitting)  void LLFloaterPreference::onOpenHardwareSettings()  { -	LLFloaterReg::showInstance("prefs_hardware_settings"); +	LLFloater* floater = LLFloaterReg::showInstance("prefs_hardware_settings"); +	addDependentFloater(floater, FALSE);  }  // static   void LLFloaterPreference::onBtnOK() @@ -1800,7 +1801,46 @@ void LLPanelPreference::updateMediaAutoPlayCheckbox(LLUICtrl* ctrl)  	}  } +class LLPanelPreferencePrivacy : public LLPanelPreference +{ +public: +	LLPanelPreferencePrivacy() +	{ +		mAccountIndependentSettings.push_back("VoiceCallsFriendsOnly"); +		mAccountIndependentSettings.push_back("AutoDisengageMic"); +	} + +	/*virtual*/ void saveSettings() +	{ +		LLPanelPreference::saveSettings(); + +		// Don't save (=erase from the saved values map) per-account privacy settings +		// if we're not logged in, otherwise they will be reset to defaults on log off. +		if (LLStartUp::getStartupState() != STATE_STARTED) +		{ +			// Erase only common settings, assuming there are no color settings on Privacy page. +			for (control_values_map_t::iterator it = mSavedValues.begin(); it != mSavedValues.end(); ) +			{ +				const std::string setting = it->first->getName(); +				if (std::find(mAccountIndependentSettings.begin(), +					mAccountIndependentSettings.end(), setting) == mAccountIndependentSettings.end()) +				{ +					mSavedValues.erase(it++); +				} +				else +				{ +					++it; +				} +			} +		} +	} + +private: +	std::list<std::string> mAccountIndependentSettings; +}; +  static LLRegisterPanelClassWrapper<LLPanelPreferenceGraphics> t_pref_graph("panel_preference_graphics"); +static LLRegisterPanelClassWrapper<LLPanelPreferencePrivacy> t_pref_privacy("panel_preference_privacy");  BOOL LLPanelPreferenceGraphics::postBuild()  { diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 7ee3294478..ec5994e917 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -198,15 +198,17 @@ public:  	virtual void saveSettings();  	class Updater; + +protected: +	typedef std::map<LLControlVariable*, LLSD> control_values_map_t; +	control_values_map_t mSavedValues; +  private:  	//for "Only friends and groups can call or IM me"  	static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&);  	//for "Show my Favorite Landmarks at Login"  	static void showFavoritesOnLoginWarning(LLUICtrl* checkbox, const LLSD& value); -	typedef std::map<LLControlVariable*, LLSD> control_values_map_t; -	control_values_map_t mSavedValues; -  	typedef std::map<std::string, LLColor4> string_color_map_t;  	string_color_map_t mSavedColors; diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index c402de66e8..ae45949b4a 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -33,6 +33,7 @@  #include "llfloater.h"  #include "llhost.h"  #include "llpanel.h" +#include "llextendedstatus.h"  #include "llenvmanager.h" // for LLEnvironmentSettings diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h index cd98f7be57..7d68431710 100644 --- a/indra/newview/llfloaterreporter.h +++ b/indra/newview/llfloaterreporter.h @@ -31,6 +31,7 @@  #include "llfloater.h"  #include "lluuid.h"  #include "v3math.h" +#include "llextendedstatus.h"  class LLAvatarName;  class LLMessageSystem; diff --git a/indra/newview/llfloatersidepanelcontainer.cpp b/indra/newview/llfloatersidepanelcontainer.cpp index be7a53491d..5385977d95 100644 --- a/indra/newview/llfloatersidepanelcontainer.cpp +++ b/indra/newview/llfloatersidepanelcontainer.cpp @@ -59,7 +59,10 @@ LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_na  	LLView* view = findChildView(panel_name, true);  	if (!view) return NULL; -	openFloater(); +	if (!getVisible()) +	{ +		openFloater(); +	}  	LLPanel* panel = NULL; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index bd5b5f4eb0..6978e6a430 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -36,6 +36,7 @@  #include "llagentcamera.h"  #include "llbutton.h"  #include "llcheckboxctrl.h" +#include "llcombobox.h"  #include "lldraghandle.h"  #include "llerror.h"  #include "llfloaterbuildoptions.h" @@ -103,6 +104,7 @@ const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =  // Local prototypes +void commit_grid_mode(LLUICtrl *ctrl);  void commit_select_component(void *data);  void click_show_more(void*);  void click_popup_info(void*); @@ -252,6 +254,7 @@ BOOL	LLFloaterTools::postBuild()  	getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform"));  	mCheckStretchTexture	= getChild<LLCheckBoxCtrl>("checkbox stretch textures");  	getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); +	mComboGridMode			= getChild<LLComboBox>("combobox grid mode");  	mCheckStretchUniformLabel = getChild<LLTextBox>("checkbox uniform label");  	// @@ -330,6 +333,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)  	mCheckSnapToGrid(NULL),  	mBtnGridOptions(NULL),  	mTitleMedia(NULL), +	mComboGridMode(NULL),  	mCheckStretchUniform(NULL),  	mCheckStretchTexture(NULL),  	mCheckStretchUniformLabel(NULL), @@ -386,6 +390,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)  	mCommitCallbackRegistrar.add("BuildTool.commitRadioMove",	boost::bind(&commit_radio_group_move,_1));  	mCommitCallbackRegistrar.add("BuildTool.commitRadioEdit",	boost::bind(&commit_radio_group_edit,_1)); +	mCommitCallbackRegistrar.add("BuildTool.gridMode",			boost::bind(&commit_grid_mode,_1));  	mCommitCallbackRegistrar.add("BuildTool.selectComponent",	boost::bind(&commit_select_component, this));  	mCommitCallbackRegistrar.add("BuildTool.gridOptions",		boost::bind(&LLFloaterTools::onClickGridOptions,this));  	mCommitCallbackRegistrar.add("BuildTool.applyToSelection",	boost::bind(&click_apply_to_selection, this)); @@ -687,6 +692,33 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)  		mRadioGroupEdit->setValue("radio select face");  	} +	if (mComboGridMode)  +	{ +		mComboGridMode->setVisible( edit_visible ); +		S32 index = mComboGridMode->getCurrentIndex(); +		mComboGridMode->removeall(); + +		switch (mObjectSelection->getSelectType()) +		{ +			case SELECT_TYPE_HUD: +				mComboGridMode->add(getString("grid_screen_text")); +				mComboGridMode->add(getString("grid_local_text")); +				break; +			case SELECT_TYPE_WORLD: +				mComboGridMode->add(getString("grid_world_text")); +				mComboGridMode->add(getString("grid_local_text")); +				mComboGridMode->add(getString("grid_reference_text")); +				break; +			case SELECT_TYPE_ATTACHMENT: +				mComboGridMode->add(getString("grid_attachment_text")); +				mComboGridMode->add(getString("grid_local_text")); +				mComboGridMode->add(getString("grid_reference_text")); +				break; +		} + +		mComboGridMode->setCurrentByIndex(index); +	} +  	// Snap to grid disabled for grab tool - very confusing  	if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );  	if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ ); @@ -1037,6 +1069,13 @@ void LLFloaterTools::setObjectType( LLPCode pcode )  	gFocusMgr.setMouseCapture(NULL);  } +void commit_grid_mode(LLUICtrl *ctrl) +{ +	LLComboBox* combo = (LLComboBox*)ctrl; + +	LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex()); +} +  void LLFloaterTools::onClickGridOptions()  { @@ -1144,7 +1183,7 @@ void LLFloaterTools::updateLandImpacts()  	childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", remaining_capacity_str);  	// Update land impacts info in the weights floater -	LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights"); +	LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::findTypedInstance<LLFloaterObjectWeights>("object_weights");  	if(object_weights_floater)  	{  		object_weights_floater->updateLandImpacts(parcel); @@ -1234,6 +1273,7 @@ void LLFloaterTools::getMediaState()  		}  	} func; +	  	// check if all faces have media(or, all dont have media)  	LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo = selected_objects->getSelectedTEValue( &func, bool_has_media ); diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 63ed9dc82b..7a19d093a4 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -33,6 +33,7 @@  class LLButton;  class LLCheckBoxCtrl; +class LLComboBox;  class LLPanelPermissions;  class LLPanelObject;  class LLPanelVolume; @@ -140,6 +141,7 @@ public:  	LLCheckBoxCtrl*	mCheckSnapToGrid;  	LLButton*		mBtnGridOptions; +	LLComboBox*		mComboGridMode;  	LLCheckBoxCtrl*	mCheckStretchUniform;  	LLCheckBoxCtrl*	mCheckStretchTexture; diff --git a/indra/newview/llfloatertranslationsettings.cpp b/indra/newview/llfloatertranslationsettings.cpp index 428a02e9f0..1a17183efd 100644 --- a/indra/newview/llfloatertranslationsettings.cpp +++ b/indra/newview/llfloatertranslationsettings.cpp @@ -293,6 +293,6 @@ void LLFloaterTranslationSettings::onBtnOK()  	gSavedSettings.setString("TranslationService", getSelectedService());  	gSavedSettings.setString("BingTranslateAPIKey", getEnteredBingKey());  	gSavedSettings.setString("GoogleTranslateAPIKey", getEnteredGoogleKey()); -	LLNearbyChatBar::getInstance()->enableTranslationCheckbox(LLTranslate::isTranslationConfigured()); +	LLNearbyChatBar::getInstance()->showTranslationCheckbox(LLTranslate::isTranslationConfigured());  	closeFloater(false);  } diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index e0d7d67f7d..2249f61435 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -255,7 +255,7 @@ LLFolderView::LLFolderView(const Params& p)  	LLRect new_r = LLRect(rect.mLeft + ICON_PAD,  			      rect.mTop - TEXT_PAD,  			      rect.mRight, -			      rect.mTop - TEXT_PAD - llfloor(font->getLineHeight())); +			      rect.mTop - TEXT_PAD - font->getLineHeight());  	text_p.rect(new_r);  	text_p.name(std::string(p.name));  	text_p.font(font); @@ -388,7 +388,7 @@ void LLFolderView::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse  static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange"); -// This view grows and shinks to enclose all of its children items and folders. +// This view grows and shrinks to enclose all of its children items and folders.  S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_generation )  {  	if (getListener()->getUUID().notNull()) @@ -414,7 +414,7 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen  		getRoot()->getFilter()->getShowFolderState();  	S32 total_width = LEFT_PAD; -	S32 running_height = mDebugFilters ? llceil(LLFontGL::getFontMonospace()->getLineHeight()) : 0; +	S32 running_height = mDebugFilters ? LLFontGL::getFontMonospace()->getLineHeight() : 0;  	S32 target_height = running_height;  	S32 parent_item_height = getRect().getHeight(); @@ -527,15 +527,15 @@ void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)  		LLView::reshape(width, height, called_from_parent);  		scroll_rect = mScrollContainer->getContentWindowRect();  	} -	width = llmax(mMinWidth, scroll_rect.getWidth()); +	width  = llmax(mMinWidth, scroll_rect.getWidth());  	height = llmax(mRunningHeight, scroll_rect.getHeight()); -	// restrict width with scroll container's width -	if (mUseEllipses) +	// Restrict width within scroll container's width +	if (mUseEllipses && mScrollContainer) +	{  		width = scroll_rect.getWidth(); - +	}  	LLView::reshape(width, height, called_from_parent); -  	mReshapeSignal(mSelectedItems, FALSE);  } @@ -1994,7 +1994,7 @@ void LLFolderView::scrollToShowItem(LLFolderViewItem* item, const LLRect& constr  		LLRect visible_doc_rect = mScrollContainer->getVisibleContentRect();  		S32 icon_height = mIcon.isNull() ? 0 : mIcon->getHeight();  -		S32 label_height = llround(getLabelFontForStyle(mLabelStyle)->getLineHeight());  +		S32 label_height = getLabelFontForStyle(mLabelStyle)->getLineHeight();   		// when navigating with keyboard, only move top of opened folder on screen, otherwise show whole folder  		S32 max_height_to_show = item->isOpen() && mScrollContainer->hasFocus() ? (llmax( icon_height, label_height ) + ICON_PAD) : local_rect.getHeight();  diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 8d6114c887..734adbc648 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -410,8 +410,8 @@ BOOL LLFolderViewItem::addToFolder(LLFolderViewFolder* folder, LLFolderView* roo  } -// Finds width and height of this object and it's children.  Also -// makes sure that this view and it's children are the right size. +// Finds width and height of this object and its children.  Also +// makes sure that this view and its children are the right size.  S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)  {  	const Params& p = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>(); @@ -423,7 +423,7 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)  		: 0;  	if (mLabelWidthDirty)  	{ -		mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + getLabelFontForStyle(mLabelStyle)->getWidth(mSearchableLabel);  +		mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + TEXT_PAD_RIGHT;   		mLabelWidthDirty = false;  	} diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 2fc79f5765..4e8dc2da16 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -114,6 +114,7 @@ public:  	static const S32 ICON_PAD = 2;  	static const S32 ICON_WIDTH = 16;  	static const S32 TEXT_PAD = 1; +	static const S32 TEXT_PAD_RIGHT = 4;  	static const S32 ARROW_SIZE = 12;  	static const S32 MAX_FOLDER_ITEM_OVERLAP = 2;  	// animation parameters diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index bbf66ca750..129cddda45 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -123,6 +123,22 @@ BOOL LLGroupList::handleRightMouseDown(S32 x, S32 y, MASK mask)  	return handled;  } +// virtual +BOOL LLGroupList::handleDoubleClick(S32 x, S32 y, MASK mask) +{ +	BOOL handled = LLView::handleDoubleClick(x, y, mask); +	// Handle double click only for the selected item in the list, skip clicks on empty space. +	if (handled) +	{ +		if (mDoubleClickSignal) +		{ +			(*mDoubleClickSignal)(this, x, y, mask); +		} +	} + +	return handled; +} +  void LLGroupList::setNameFilter(const std::string& filter)  {  	std::string filter_upper = filter; diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h index d7051db891..8abf14b3d0 100644 --- a/indra/newview/llgrouplist.h +++ b/indra/newview/llgrouplist.h @@ -51,6 +51,7 @@ public:  	virtual void draw(); // from LLView  	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); // from LLView +	/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); // from LLView  	void setNameFilter(const std::string& filter);  	void toggleIcons(); diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp index 122711a86d..dff310ecf9 100644 --- a/indra/newview/llhudrender.cpp +++ b/indra/newview/llhudrender.cpp @@ -138,7 +138,7 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,  	LLUI::translate((F32) winX*1.0f/LLFontGL::sScaleX, (F32) winY*1.0f/(LLFontGL::sScaleY), -(((F32) winZ*2.f)-1.f));  	F32 right_x; -	font.render(wstr, 0, 0, 0, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x); +	font.render(wstr, 0, 0, 1, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x);  	LLUI::popMatrix();  	gGL.popMatrix(); diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 24a876c59a..579b6008ae 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -227,7 +227,7 @@ void LLHUDText::renderText()  			 segment_iter != mTextSegments.end(); ++segment_iter )  		{  			const LLFontGL* fontp = segment_iter->mFont; -			y_offset -= fontp->getLineHeight(); +			y_offset -= fontp->getLineHeight() - 1; // correction factor to match legacy font metrics  			U8 style = segment_iter->mStyle;  			LLFontGL::ShadowType shadow = LLFontGL::DROP_SHADOW; @@ -480,8 +480,6 @@ void LLHUDText::updateSize()  	F32 width = 0.f;  	S32 max_lines = getMaxLines(); -	//S32 lines = (max_lines < 0) ? (S32)mTextSegments.size() : llmin((S32)mTextSegments.size(), max_lines); -	//F32 height = (F32)mFontp->getLineHeight() * (lines + mLabelSegments.size());  	S32 start_segment;  	if (max_lines < 0) start_segment = 0; @@ -491,7 +489,7 @@ void LLHUDText::updateSize()  	while (iter != mTextSegments.end())  	{  		const LLFontGL* fontp = iter->mFont; -		height += fontp->getLineHeight(); +		height += fontp->getLineHeight() - 1; // correction factor to match legacy font metrics  		width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH));  		++iter;  	} diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index a856bd0bdc..e69c45de58 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -2977,6 +2977,17 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)  	return im_session->mStartedAsIMCall;  } +void LLIMMgr::addNotifiedNonFriendSessionID(const LLUUID& session_id) +{ +	mNotifiedNonFriendSessions.insert(session_id); +} + +bool LLIMMgr::isNonFriendSessionNotified(const LLUUID& session_id) +{ +	return mNotifiedNonFriendSessions.end() != mNotifiedNonFriendSessions.find(session_id); + +} +  void LLIMMgr::noteOfflineUsers(  	const LLUUID& session_id,  	const LLDynamicArray<LLUUID>& ids) diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index b1be26a169..f07a78e2f7 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -438,6 +438,10 @@ public:  	bool isVoiceCall(const LLUUID& session_id); +	void addNotifiedNonFriendSessionID(const LLUUID& session_id); + +	bool isNonFriendSessionNotified(const LLUUID& session_id); +  private:  	/** @@ -465,6 +469,14 @@ private:  	typedef std::list <LLIMSessionObserver *> session_observers_list_t;  	session_observers_list_t mSessionObservers; +	// EXP-901 +	// If "Only friends and groups can IM me" option is ON but the user got message from non-friend, +	// the user should be notified that to be able to see this message the option should be OFF. +	// This set stores session IDs in which user was notified. Need to store this IDs so that the user +	// be notified only one time per session with non-friend. +	typedef std::set<LLUUID> notified_non_friend_sessions_t; +	notified_non_friend_sessions_t mNotifiedNonFriendSessions; +  	LLSD mPendingInvitations;  	LLSD mPendingAgentListUpdates;  }; diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp index d7b82667d1..f4fe5dec01 100644 --- a/indra/newview/llinspecttoast.cpp +++ b/indra/newview/llinspecttoast.cpp @@ -72,6 +72,8 @@ LLInspectToast::LLInspectToast(const LLSD& notification_id) :  LLInspectToast::~LLInspectToast()  {  	LLTransientFloaterMgr::getInstance()->removeControlView(this); + +	mConnection.disconnect();  }  // virtual diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index cebe93f042..257ceed912 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -148,7 +148,7 @@ LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory,  	mInvType(LLInventoryType::IT_NONE),  	mIsLink(FALSE)  { -	mInventoryPanel = inventory->getHandle(); +	mInventoryPanel = inventory->getInventoryPanelHandle();  	const LLInventoryObject* obj = getInventoryObject();  	mIsLink = obj && obj->getIsLinkType();  } @@ -798,7 +798,7 @@ LLInventoryObject* LLInvFVBridge::getInventoryObject() const  LLInventoryModel* LLInvFVBridge::getInventoryModel() const  { -	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); +	LLInventoryPanel* panel = mInventoryPanel.get();  	return panel ? panel->getModel() : NULL;  } @@ -1324,8 +1324,7 @@ void LLItemBridge::selectItem()  	LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());  	if(item && !item->isFinished())  	{ -		item->fetchFromServer(); -		//LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false); +		LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false);  	}  } @@ -1738,7 +1737,7 @@ BOOL LLFolderBridge::isItemRemovable() const  		return FALSE;  	} -	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); +	LLInventoryPanel* panel = mInventoryPanel.get();  	LLFolderViewFolder* folderp = dynamic_cast<LLFolderViewFolder*>(panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL);  	if (folderp)  	{ @@ -2096,7 +2095,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  							// NOTE: The cargo id's count is a total of categories AND items but we err on the side of  							//       prevention rather than letting too many folders into the hierarchy of the outbox,  							//       when we're dragging the item to a new parent -							dragged_folder_count += LLToolDragAndDrop::instance().getCargoIDsCount(); +							dragged_folder_count += LLToolDragAndDrop::instance().getCargoCount();  						}  					} @@ -2820,18 +2819,62 @@ void LLFolderBridge::pasteFromClipboard()  	if(model && isClipboardPasteable())  	{  		const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); +		const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); +  		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);  		const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); - -		const LLUUID parent_id(mUUID); +		const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);  		LLDynamicArray<LLUUID> objects;  		LLInventoryClipboard::instance().retrieve(objects); + +		if (move_is_into_outbox) +		{ +			LLFolderViewItem * outbox_itemp = mRoot->getItemByID(mUUID); + +			if (outbox_itemp) +			{ +				LLToolDragAndDrop::instance().setCargoCount(objects.size()); + +				BOOL can_list = TRUE; + +				for (LLDynamicArray<LLUUID>::const_iterator iter = objects.begin(); +					(iter != objects.end()) && (can_list == TRUE); +					++iter) +				{ +					const LLUUID& item_id = (*iter); +					LLInventoryItem *item = model->getItem(item_id); + +					if (item) +					{ +						MASK mask = 0x0; +						BOOL drop = FALSE; +						EDragAndDropType cargo_type = LLViewerAssetType::lookupDragAndDropType(item->getActualType()); +						void * cargo_data = (void *) item; +						std::string tooltip_msg; + +						can_list = outbox_itemp->getListener()->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg); +					} +				} + +				LLToolDragAndDrop::instance().resetCargoCount(); + +				if (can_list == FALSE) +				{ +					// Notify user of failure somehow -- play error sound?  modal dialog? +					return; +				} +			} +		} + +		const LLUUID parent_id(mUUID); +  		for (LLDynamicArray<LLUUID>::const_iterator iter = objects.begin();  			 iter != objects.end();  			 ++iter)  		{  			const LLUUID& item_id = (*iter); +  			LLInventoryItem *item = model->getItem(item_id);  			if (item)  			{ @@ -2874,8 +2917,17 @@ void LLFolderBridge::pasteLinkFromClipboard()  	if(model)  	{  		const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); +		const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); +  		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);  		const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); +		const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); + +		if (move_is_into_outbox) +		{ +			// Notify user of failure somehow -- play error sound?  modal dialog? +			return; +		}  		const LLUUID parent_id(mUUID); @@ -3290,7 +3342,7 @@ void LLFolderBridge::createNewCategory(void* user_data)  {  	LLFolderBridge* bridge = (LLFolderBridge*)user_data;  	if(!bridge) return; -	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(bridge->mInventoryPanel.get()); +	LLInventoryPanel* panel = bridge->mInventoryPanel.get();  	if (!panel) return;  	LLInventoryModel* model = panel->getModel();  	if(!model) return; @@ -3470,7 +3522,7 @@ void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)  	// use callback to rearrange favorite landmarks after adding  	// to have new one placed before target (on which it was dropped). See EXT-4312.  	LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback(); -	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); +	LLInventoryPanel* panel = mInventoryPanel.get();  	LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;  	if (drag_over_item && drag_over_item->getListener())  	{ @@ -3520,6 +3572,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  	if (!isAgentInventory()) return FALSE; // cannot drag into library  	if (!isAgentAvatarValid()) return FALSE; +	LLInventoryPanel* destination_panel = mInventoryPanel.get(); +	if (!destination_panel) return false; + +	LLInventoryFilter* filter = destination_panel->getFilter(); +	if (!filter) return false; +  	const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);  	const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);  	const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false); @@ -3529,7 +3587,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  	const BOOL move_is_into_favorites = (mUUID == favorites_id);  	const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);  	const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); -	const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); //(mUUID == outbox_id); +	const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);  	const BOOL move_is_from_outbox = model->isObjectDescendentOf(inv_item->getUUID(), outbox_id);  	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); @@ -3608,7 +3666,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			{  				const LLViewerInventoryCategory * master_folder = model->getFirstDescendantOf(outbox_id, mUUID); -				int existing_item_count = LLToolDragAndDrop::instance().getCargoIDsCount(); +				int existing_item_count = LLToolDragAndDrop::instance().getCargoCount();  				if (master_folder != NULL)  				{ @@ -3628,6 +3686,21 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			}  		} +		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); + +		// Check whether the item being dragged from active inventory panel +		// passes the filter of the destination panel. +		if (accept && active_panel) +		{ +			LLFolderView* active_folder_viev = active_panel->getRootFolder(); +			if (!active_folder_viev) return false; + +			LLFolderViewItem* fv_item = active_folder_viev->getItemByID(inv_item->getUUID()); +			if (!fv_item) return false; + +			accept = filter->check(fv_item); +		} +  		if (accept && drop)  		{  			if (inv_item->getType() == LLAssetType::AT_GESTURE @@ -3637,15 +3710,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			}  			// If an item is being dragged between windows, unselect everything in the active window   			// so that we don't follow the selection to its new location (which is very annoying). -			LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); -			if (active_panel) -			{ -				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); -				if (active_panel && (panel != active_panel)) +			if (active_panel && (destination_panel != active_panel))  				{  					active_panel->unSelectAll();  				} -			}  			//--------------------------------------------------------------------------------  			// Destination folder logic @@ -3655,8 +3723,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			// (only reorder the item in Favorites folder)  			if ((mUUID == inv_item->getParentUUID()) && move_is_into_favorites)  			{ -				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); -				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL; +				LLFolderViewItem* itemp = destination_panel->getRootFolder()->getDraggingOverItem();  				if (itemp)  				{  					LLUUID srcItemId = inv_item->getUUID(); @@ -3760,6 +3827,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			accept = FALSE;  		} +		// Check whether the item being dragged from in world +		// passes the filter of the destination panel. +		if (accept) +		{ +			accept = filter->check(inv_item); +		} +  		if (accept && drop)  		{  			LLMoveInv* move_inv = new LLMoveInv; @@ -3797,6 +3871,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			accept = !(move_is_into_current_outfit || move_is_into_outfit);  		} +		// Check whether the item being dragged from notecard +		// passes the filter of the destination panel. +		if (accept) +		{ +			accept = filter->check(inv_item); +		} +  		if (accept && drop)  		{  			copy_inventory_from_notecard(mUUID,  // Drop to the chosen destination folder @@ -3828,6 +3909,21 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  				accept = can_move_to_landmarks(inv_item);  			} +			LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); + +			// Check whether the item being dragged from the library +			// passes the filter of the destination panel. +			if (accept && active_panel) +			{ +				LLFolderView* active_folder_viev = active_panel->getRootFolder(); +				if (!active_folder_viev) return false; + +				LLFolderViewItem* fv_item = active_folder_viev->getItemByID(inv_item->getUUID()); +				if (!fv_item) return false; + +				accept = filter->check(fv_item); +			} +  			if (accept && drop)  			{  				// FAVORITES folder @@ -4184,7 +4280,7 @@ LLCallingCardBridge::~LLCallingCardBridge()  void LLCallingCardBridge::refreshFolderViewItem()  { -	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); +	LLInventoryPanel* panel = mInventoryPanel.get();  	LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL;  	if (itemp)  	{ diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 871657a58a..3bcd71557c 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -161,7 +161,7 @@ protected:  									 BOOL restamp);  	void removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch);  protected: -	LLHandle<LLPanel> mInventoryPanel; +	LLHandle<LLInventoryPanel> mInventoryPanel;  	LLFolderView* mRoot;  	const LLUUID mUUID;	// item id  	LLInventoryType::EType mInvType; diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index d54bce4619..796251cae5 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -108,6 +108,19 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item)  	return passed;  } +bool LLInventoryFilter::check(const LLInventoryItem* item) +{ +	mSubStringMatchOffset = mFilterSubString.size() ? item->getName().find(mFilterSubString) : std::string::npos; + +	const bool passed_filtertype = checkAgainstFilterType(item); +	const bool passed_permissions = checkAgainstPermissions(item); +	const bool passed = (passed_filtertype && +						 passed_permissions && +						 (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos)); + +	return passed; +} +  bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder)  {  	// we're showing all folders, overriding filter @@ -227,6 +240,66 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con  	return TRUE;  } +bool LLInventoryFilter::checkAgainstFilterType(const LLInventoryItem* item) const +{ +	LLInventoryType::EType object_type = item->getInventoryType(); +	const LLUUID object_id = item->getUUID(); + +	const U32 filterTypes = mFilterOps.mFilterTypes; + +	//////////////////////////////////////////////////////////////////////////////// +	// FILTERTYPE_OBJECT +	// Pass if this item's type is of the correct filter type +	if (filterTypes & FILTERTYPE_OBJECT) +	{ +		// If it has no type, pass it, unless it's a link. +		if (object_type == LLInventoryType::IT_NONE) +		{ +			if (item && item->getIsLinkType()) +			{ +				return false; +			} +		} +		else if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0)) +		{ +			return false; +		} +	} + +	//////////////////////////////////////////////////////////////////////////////// +	// FILTERTYPE_UUID +	// Pass if this item is the target UUID or if it links to the target UUID +	if (filterTypes & FILTERTYPE_UUID) +	{ +		if (!item) return false; + +		if (item->getLinkedUUID() != mFilterOps.mFilterUUID) +			return false; +	} + +	//////////////////////////////////////////////////////////////////////////////// +	// FILTERTYPE_DATE +	// Pass if this item is within the date range. +	if (filterTypes & FILTERTYPE_DATE) +	{ +		const U16 HOURS_TO_SECONDS = 3600; +		time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS; +		if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest) +		{ +			earliest = mFilterOps.mMinDate; +		} +		else if (!mFilterOps.mHoursAgo) +		{ +			earliest = 0; +		} +		if (item->getCreationDate() < earliest || +			item->getCreationDate() > mFilterOps.mMaxDate) +			return false; +	} + +	return true; +} +  BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) const  {  	const LLFolderViewEventListener* listener = item->getListener(); @@ -244,6 +317,17 @@ BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) co  	return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions;  } +bool LLInventoryFilter::checkAgainstPermissions(const LLInventoryItem* item) const +{ +	if (!item) return false; + +	LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); +	PermissionMask perm = new_item->getPermissionMask(); +	new_item = NULL; + +	return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions; +} +  BOOL LLInventoryFilter::checkAgainstFilterLinks(const LLFolderViewItem* item) const  {  	const LLFolderViewEventListener* listener = item->getListener(); diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index bba24ac652..343306ae8e 100644 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -32,6 +32,7 @@  class LLFolderViewItem;  class LLFolderViewFolder; +class LLInventoryItem;  class LLInventoryFilter  { @@ -115,9 +116,12 @@ public:  	// + Execution And Results  	// +-------------------------------------------------------------------+  	BOOL 				check(const LLFolderViewItem* item); +	bool				check(const LLInventoryItem* item);  	bool				checkFolder(const LLFolderViewFolder* folder);  	BOOL 				checkAgainstFilterType(const LLFolderViewItem* item) const; +	bool 				checkAgainstFilterType(const LLInventoryItem* item) const;  	BOOL 				checkAgainstPermissions(const LLFolderViewItem* item) const; +	bool 				checkAgainstPermissions(const LLInventoryItem* item) const;  	BOOL 				checkAgainstFilterLinks(const LLFolderViewItem* item) const;  	std::string::size_type getStringMatchOffset() const; diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 91fdd67806..cb140cf15c 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -50,7 +50,7 @@ LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch() :  	mMinTimeBetweenFetches(0.3f),  	mMaxTimeBetweenFetches(10.f),  	mTimelyFetchPending(FALSE), -	mBulkFetchCount(0) +	mFetchCount(0)  {  } @@ -60,7 +60,7 @@ LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch()  bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete() const  { -	return mFetchQueue.empty() && mBulkFetchCount<=0; +	return mFetchQueue.empty() && mFetchCount<=0;  }  bool LLInventoryModelBackgroundFetch::libraryFetchStarted() const @@ -103,14 +103,15 @@ BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive() const  	return mBackgroundFetchActive;  } -void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id, BOOL recursive) +void LLInventoryModelBackgroundFetch::start(const LLUUID& id, BOOL recursive)  { -	if (!mAllFoldersFetched || cat_id.notNull()) -	{ -		LL_DEBUGS("InventoryFetch") << "Start fetching category: " << cat_id << ", recursive: " << recursive << LL_ENDL; +	LLViewerInventoryCategory* cat = gInventory.getCategory(id); +	if (cat || (id.isNull() && !mAllFoldersFetched)) +	{	// it's a folder, do a bulk fetch +		LL_DEBUGS("InventoryFetch") << "Start fetching category: " << id << ", recursive: " << recursive << LL_ENDL;  		mBackgroundFetchActive = TRUE; -		if (cat_id.isNull()) +		if (id.isNull())  		{  			if (!mRecursiveInventoryFetchStarted)  			{ @@ -128,21 +129,31 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id, BOOL recursive  		else  		{  			// Specific folder requests go to front of queue. -			if (mFetchQueue.empty() || mFetchQueue.front().mCatUUID != cat_id) +			if (mFetchQueue.empty() || mFetchQueue.front().mUUID != id)  			{ -				mFetchQueue.push_front(FetchQueueInfo(cat_id, recursive)); +				mFetchQueue.push_front(FetchQueueInfo(id, recursive));  				gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);  			} -			if (cat_id == gInventory.getLibraryRootFolderID()) +			if (id == gInventory.getLibraryRootFolderID())  			{  				mRecursiveLibraryFetchStarted |= recursive;  			} -			if (cat_id == gInventory.getRootFolderID()) +			if (id == gInventory.getRootFolderID())  			{  				mRecursiveInventoryFetchStarted |= recursive;  			}  		}  	} +	else if (LLViewerInventoryItem* itemp = gInventory.getItem(id)) +	{ +		if (!itemp->mIsComplete && (mFetchQueue.empty() || mFetchQueue.front().mUUID != id)) +		{ +			mBackgroundFetchActive = TRUE; + +			mFetchQueue.push_front(FetchQueueInfo(id, false, false)); +			gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); +		} +	}  }  void LLInventoryModelBackgroundFetch::findLostItems() @@ -158,7 +169,7 @@ void LLInventoryModelBackgroundFetch::stopBackgroundFetch()  	{  		mBackgroundFetchActive = FALSE;  		gIdleCallbacks.deleteFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); -		mBulkFetchCount=0; +		mFetchCount=0;  		mMinTimeBetweenFetches=0.0f;  	}  } @@ -183,10 +194,9 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()  	if (mBackgroundFetchActive && gAgent.getRegion())  	{  		// If we'll be using the capability, we'll be sending batches and the background thing isn't as important. -		std::string url = gAgent.getRegion()->getCapability("FetchInventoryDescendents2");    -		if (gSavedSettings.getBOOL("UseHTTPInventory") && !url.empty())  +		if (gSavedSettings.getBOOL("UseHTTPInventory"))   		{ -			bulkFetch(url); +			bulkFetch();  			return;  		} @@ -230,7 +240,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()  			}  			const FetchQueueInfo info = mFetchQueue.front(); -			LLViewerInventoryCategory* cat = gInventory.getCategory(info.mCatUUID); +			LLViewerInventoryCategory* cat = gInventory.getCategory(info.mUUID);  			// Category has been deleted, remove from queue.  			if (!cat) @@ -258,7 +268,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()  				}  			}  			// Do I have all my children? -			else if (gInventory.isCategoryComplete(info.mCatUUID)) +			else if (gInventory.isCategoryComplete(info.mUUID))  			{  				// Finished with this category, remove from queue.  				mFetchQueue.pop_front(); @@ -313,15 +323,35 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()  	}  } -void LLInventoryModelBackgroundFetch::incrBulkFetch(S16 fetching)  +void LLInventoryModelBackgroundFetch::incrFetchCount(S16 fetching)   {   -	mBulkFetchCount += fetching;  -	if (mBulkFetchCount < 0) +	mFetchCount += fetching;  +	if (mFetchCount < 0)  	{ -		mBulkFetchCount = 0;  +		mFetchCount = 0;   	}  } +class LLInventoryModelFetchItemResponder : public LLInventoryModel::fetchInventoryResponder +{ +public: +	LLInventoryModelFetchItemResponder(const LLSD& request_sd) : LLInventoryModel::fetchInventoryResponder(request_sd) {}; +	void result(const LLSD& content);			 +	void error(U32 status, const std::string& reason); +}; + +void LLInventoryModelFetchItemResponder::result( const LLSD& content ) +{ +	LLInventoryModel::fetchInventoryResponder::result(content); +	LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); +} + +void LLInventoryModelFetchItemResponder::error( U32 status, const std::string& reason ) +{ +	LLInventoryModel::fetchInventoryResponder::error(status, reason); +	LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); +} +  class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder  { @@ -458,7 +488,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)  		}  	} -	fetcher->incrBulkFetch(-1); +	fetcher->incrFetchCount(-1);  	if (fetcher->isBulkFetchProcessingComplete())  	{ @@ -477,7 +507,7 @@ void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::str  	llinfos << "LLInventoryModelFetchDescendentsResponder::error "  		<< status << ": " << reason << llendl; -	fetcher->incrBulkFetch(-1); +	fetcher->incrFetchCount(-1);  	if (status==499) // timed out  	{ @@ -508,12 +538,14 @@ BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat  // Bundle up a bunch of requests to send all at once.  // static    -void LLInventoryModelBackgroundFetch::bulkFetch(std::string url) +void LLInventoryModelBackgroundFetch::bulkFetch()  {  	//Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped.  	//If there are items in mFetchQueue, we want to check the time since the last bulkFetch was   	//sent.  If it exceeds our retry time, go ahead and fire off another batch.    	//Stopbackgroundfetch will be run from the Responder instead of here.   +	LLViewerRegion* region = gAgent.getRegion(); +	if (!region) return;  	S16 max_concurrent_fetches=8;  	F32 new_min_time = 0.5f;			//HACK!  Clean this up when old code goes away entirely. @@ -523,12 +555,13 @@ void LLInventoryModelBackgroundFetch::bulkFetch(std::string url)  	}  	if (gDisconnected || -		(mBulkFetchCount > max_concurrent_fetches) || +		(mFetchCount > max_concurrent_fetches) ||  		(mFetchTimer.getElapsedTimeF32() < mMinTimeBetweenFetches))  	{  		return; // just bail if we are disconnected  	}	 +	U32 item_count=0;  	U32 folder_count=0;  	U32 max_batch_size=5; @@ -536,83 +569,159 @@ void LLInventoryModelBackgroundFetch::bulkFetch(std::string url)  	uuid_vec_t recursive_cats; -	LLSD body; -	LLSD body_lib; +	LLSD folder_request_body; +	LLSD folder_request_body_lib; +	LLSD item_request_body; +	LLSD item_request_body_lib; -	while (!(mFetchQueue.empty()) && (folder_count < max_batch_size)) +	while (!(mFetchQueue.empty()) && ((item_count + folder_count) < max_batch_size))  	{  		const FetchQueueInfo& fetch_info = mFetchQueue.front(); -		const LLUUID &cat_id = fetch_info.mCatUUID; -        if (cat_id.isNull()) //DEV-17797 -        { -			LLSD folder_sd; -			folder_sd["folder_id"]		= LLUUID::null.asString(); -			folder_sd["owner_id"]		= gAgent.getID(); -			folder_sd["sort_order"]		= (LLSD::Integer)sort_order; -			folder_sd["fetch_folders"]	= (LLSD::Boolean)FALSE; -			folder_sd["fetch_items"]	= (LLSD::Boolean)TRUE; -			body["folders"].append(folder_sd); -            folder_count++; -        } -        else -        { -		    const LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); +		if (fetch_info.mIsCategory) +		{ + +			const LLUUID &cat_id = fetch_info.mUUID; +			if (cat_id.isNull()) //DEV-17797 +			{ +				LLSD folder_sd; +				folder_sd["folder_id"]		= LLUUID::null.asString(); +				folder_sd["owner_id"]		= gAgent.getID(); +				folder_sd["sort_order"]		= (LLSD::Integer)sort_order; +				folder_sd["fetch_folders"]	= (LLSD::Boolean)FALSE; +				folder_sd["fetch_items"]	= (LLSD::Boolean)TRUE; +				folder_request_body["folders"].append(folder_sd); +				folder_count++; +			} +			else +			{ +				const LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); -		    if (cat) -		    { -			    if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) -			    { -				    LLSD folder_sd; -				    folder_sd["folder_id"]		= cat->getUUID(); -				    folder_sd["owner_id"]		= cat->getOwnerID(); -				    folder_sd["sort_order"]		= (LLSD::Integer)sort_order; -				    folder_sd["fetch_folders"]	= TRUE; //(LLSD::Boolean)sFullFetchStarted; -				    folder_sd["fetch_items"]	= (LLSD::Boolean)TRUE; -				     -				    if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID()) -					    body_lib["folders"].append(folder_sd); -				    else -					    body["folders"].append(folder_sd); -				    folder_count++; -			    } -				// May already have this folder, but append child folders to list. -			    if (fetch_info.mRecursive) -			    {	 -					LLInventoryModel::cat_array_t* categories; -					LLInventoryModel::item_array_t* items; -					gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); -					for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); -						 it != categories->end(); -						 ++it) +				if (cat) +				{ +					if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())  					{ -						mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(), fetch_info.mRecursive)); -				    } -			    } -		    } -        } -		if (fetch_info.mRecursive) -			recursive_cats.push_back(cat_id); +						LLSD folder_sd; +						folder_sd["folder_id"]		= cat->getUUID(); +						folder_sd["owner_id"]		= cat->getOwnerID(); +						folder_sd["sort_order"]		= (LLSD::Integer)sort_order; +						folder_sd["fetch_folders"]	= TRUE; //(LLSD::Boolean)sFullFetchStarted; +						folder_sd["fetch_items"]	= (LLSD::Boolean)TRUE; +				     +						if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID()) +							folder_request_body_lib["folders"].append(folder_sd); +						else +							folder_request_body["folders"].append(folder_sd); +						folder_count++; +					} +					// May already have this folder, but append child folders to list. +					if (fetch_info.mRecursive) +					{	 +						LLInventoryModel::cat_array_t* categories; +						LLInventoryModel::item_array_t* items; +						gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); +						for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); +							 it != categories->end(); +							 ++it) +						{ +							mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(), fetch_info.mRecursive)); +						} +					} +				} +			} +			if (fetch_info.mRecursive) +				recursive_cats.push_back(cat_id); +		} +		else +		{ +			LLViewerInventoryItem* itemp = gInventory.getItem(fetch_info.mUUID); +			if (itemp) +			{ +				LLSD item_sd; +				item_sd["owner_id"] = itemp->getPermissions().getOwner(); +				item_sd["item_id"] = itemp->getUUID(); +				if (itemp->getPermissions().getOwner() == gAgent.getID()) +				{ +					item_request_body.append(item_sd); +				} +				else +				{ +					item_request_body_lib.append(item_sd); +				} +				//itemp->fetchFromServer(); +				item_count++; +			} +		}  		mFetchQueue.pop_front();  	} -	if (folder_count > 0) +	if (item_count + folder_count > 0)  	{ -		mBulkFetchCount++; -		if (body["folders"].size()) +		if (folder_count)  		{ -			LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(body, recursive_cats); -			LLHTTPClient::post(url, body, fetcher, 300.0); +			std::string url = region->getCapability("FetchInventoryDescendents2");    +			mFetchCount++; +			if (folder_request_body["folders"].size()) +			{ +				LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats); +				LLHTTPClient::post(url, folder_request_body, fetcher, 300.0); +			} +			if (folder_request_body_lib["folders"].size()) +			{ +				std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2"); + +				LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats); +				LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0); +			}  		} -		if (body_lib["folders"].size()) +		if (item_count)  		{ -			std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2"); -			 -			LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(body_lib, recursive_cats); -			LLHTTPClient::post(url_lib, body_lib, fetcher, 300.0); +			std::string url; + +			if (item_request_body.size()) +			{ +				mFetchCount++; +				url = region->getCapability("FetchInventory2"); +				if (!url.empty()) +				{ +					LLSD body; +					body["agent_id"]	= gAgent.getID(); +					body["items"] = item_request_body; + +					LLHTTPClient::post(url, body, new LLInventoryModelFetchItemResponder(body)); +				} +				//else +				//{ +				//	LLMessageSystem* msg = gMessageSystem; +				//	msg->newMessage("FetchInventory"); +				//	msg->nextBlock("AgentData"); +				//	msg->addUUID("AgentID", gAgent.getID()); +				//	msg->addUUID("SessionID", gAgent.getSessionID()); +				//	msg->nextBlock("InventoryData"); +				//	msg->addUUID("OwnerID", mPermissions.getOwner()); +				//	msg->addUUID("ItemID", mUUID); +				//	gAgent.sendReliableMessage(); +				//} +			} + +			if (item_request_body_lib.size()) +			{ +				mFetchCount++; + +				url = region->getCapability("FetchLib2"); +				if (!url.empty()) +				{ +					LLSD body; +					body["agent_id"]	= gAgent.getID(); +					body["items"] = item_request_body_lib; + +					LLHTTPClient::post(url, body, new LLInventoryModelFetchItemResponder(body)); +				} +			}  		}  		mFetchTimer.reset();  	} +  	else if (isBulkFetchProcessingComplete())  	{  		setAllFoldersFetched(); @@ -624,7 +733,7 @@ bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LL  	for (fetch_queue_t::const_iterator it = mFetchQueue.begin();  		 it != mFetchQueue.end(); ++it)  	{ -		const LLUUID& fetch_id = (*it).mCatUUID; +		const LLUUID& fetch_id = (*it).mUUID;  		if (gInventory.isObjectDescendentOf(fetch_id, cat_id))  			return false;  	} diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index c35c785ceb..0745407a8c 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -60,10 +60,10 @@ public:  	bool inventoryFetchInProgress() const;      void findLostItems();	 +	void incrFetchCount(S16 fetching);  protected: -	void incrBulkFetch(S16 fetching);  	bool isBulkFetchProcessingComplete() const; -	void bulkFetch(std::string url); +	void bulkFetch();  	void backgroundFetch();  	static void backgroundFetchCB(void*); // background fetch idle function @@ -77,7 +77,7 @@ private:  	BOOL mAllFoldersFetched;  	BOOL mBackgroundFetchActive; -	S16 mBulkFetchCount; +	S16 mFetchCount;  	BOOL mTimelyFetchPending;  	S32 mNumFetchRetries; @@ -87,11 +87,11 @@ private:  	struct FetchQueueInfo  	{ -		FetchQueueInfo(const LLUUID& id, BOOL recursive) : -			mCatUUID(id), mRecursive(recursive) -		{ -		} -		LLUUID mCatUUID; +		FetchQueueInfo(const LLUUID& id, BOOL recursive, bool is_category = true) : +			mUUID(id), mRecursive(recursive), mIsCategory(is_category) +		{} +		LLUUID mUUID; +		bool mIsCategory;  		BOOL mRecursive;  	};  	typedef std::deque<FetchQueueInfo> fetch_queue_t; diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 8279163762..7d805f6862 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -160,6 +160,8 @@ public:  	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); +	LLHandle<LLInventoryPanel> getInventoryPanelHandle() const { return getDerivedHandle<LLInventoryPanel>(); } +  	// Callbacks  	void doToSelected(const LLSD& userdata);  	void doCreate(const LLSD& userdata); diff --git a/indra/newview/llmemoryview.cpp b/indra/newview/llmemoryview.cpp index 7e9c3c84a7..c0a323d6cb 100644 --- a/indra/newview/llmemoryview.cpp +++ b/indra/newview/llmemoryview.cpp @@ -220,7 +220,7 @@ void LLMemoryView::draw()  	S32 x, y;  	S32 margin = 10; -	S32 texth = (S32)LLFontGL::getFontMonospace()->getLineHeight(); +	S32 texth = LLFontGL::getFontMonospace()->getLineHeight();  	S32 xleft = margin;  	S32 ytop = height - margin; diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index 04e1570081..7a70370fe3 100644 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -29,6 +29,7 @@  #include "llstring.h"  #include "lluuid.h" +#include "llextendedstatus.h"  class LLViewerObject;  class LLMessageSystem; diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 4512c14b7a..b4224e30e6 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -124,7 +124,7 @@ BOOL LLNearbyChatBar::postBuild()  // virtual  void LLNearbyChatBar::onOpen(const LLSD& key)  { -	enableTranslationCheckbox(LLTranslate::isTranslationConfigured()); +	showTranslationCheckbox(LLTranslate::isTranslationConfigured());  }  bool LLNearbyChatBar::applyRectControl() @@ -170,9 +170,9 @@ void LLNearbyChatBar::showHistory()  	}  } -void LLNearbyChatBar::enableTranslationCheckbox(BOOL enable) +void LLNearbyChatBar::showTranslationCheckbox(BOOL show)  { -	getChild<LLUICtrl>("translate_chat_checkbox")->setEnabled(enable); +	getChild<LLUICtrl>("translate_chat_checkbox_lp")->setVisible(show);  }  void LLNearbyChatBar::draw() diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index baf12a06ea..8547cf0bce 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -61,7 +61,7 @@ public:  	static void sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate);  	void showHistory(); -	void enableTranslationCheckbox(BOOL enable); +	void showTranslationCheckbox(BOOL show);  	/*virtual*/void setMinimized(BOOL b);  protected: diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp index 6105eff8ea..f792f53ac5 100644 --- a/indra/newview/llnotificationmanager.cpp +++ b/indra/newview/llnotificationmanager.cpp @@ -35,6 +35,7 @@  #include "llnotifications.h"  #include <boost/bind.hpp> +#include <boost/foreach.hpp>  using namespace LLNotificationsUI; @@ -48,6 +49,10 @@ LLNotificationManager::LLNotificationManager()  //--------------------------------------------------------------------------  LLNotificationManager::~LLNotificationManager()  { +	BOOST_FOREACH(listener_pair_t& pair, mChannelListeners) +	{ +		pair.second.disconnect(); +	}  }  //-------------------------------------------------------------------------- @@ -64,16 +69,16 @@ void LLNotificationManager::init()  	LLNotificationChannel::buildChannel("Browser", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "browser"));  	LLNotificationChannel::buildChannel("Outbox", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "outbox")); -	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("Group Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("Alerts")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); -	LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1)); -	LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1)); -	LLNotifications::instance().getChannel("Outbox")->connectChanged(boost::bind(&LLOutboxNotification::processNotification, LLOutboxNotification::getInstance(), _1)); +	mChannelListeners["Notifications"] = LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["NotificationTips"] = LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["Group Notifications"] = LLNotifications::instance().getChannel("Group Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["Alerts"] = LLNotifications::instance().getChannel("Alerts")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["AlertModal"] = LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["IM Notifications"] = LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["Offer"] = LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); +	mChannelListeners["Hints"] = LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1)); +	mChannelListeners["Browser"] = LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1)); +	mChannelListeners["Outbox"] = LLNotifications::instance().getChannel("Outbox")->connectChanged(boost::bind(&LLOutboxNotification::processNotification, LLOutboxNotification::getInstance(), _1));  	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));  	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD())); @@ -92,6 +97,9 @@ bool LLNotificationManager::onNotification(const LLSD& notify)  {  	LLSysHandler* handle = NULL; +	if (LLNotifications::destroyed()) +		return false; +  	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());  	if (!notification)  diff --git a/indra/newview/llnotificationmanager.h b/indra/newview/llnotificationmanager.h index 16e82e4cce..27b6ba1c71 100644 --- a/indra/newview/llnotificationmanager.h +++ b/indra/newview/llnotificationmanager.h @@ -28,6 +28,8 @@  #ifndef LL_LLNOTIFICATIONMANAGER_H  #define LL_LLNOTIFICATIONMANAGER_H +#include "llevents.h" +  #include "lluictrl.h"  #include "llnotificationhandler.h" @@ -47,6 +49,7 @@ class LLToast;  class LLNotificationManager : public LLSingleton<LLNotificationManager>  {  	typedef std::pair<std::string, LLEventHandler*> eventhandlers; +	typedef std::pair<const std::string, LLBoundListener> listener_pair_t;  public:	  	LLNotificationManager();	  	virtual ~LLNotificationManager(); @@ -70,6 +73,8 @@ private:  	//TODO (*)  	std::map<std::string, boost::shared_ptr<LLEventHandler> > mNotifyHandlers;  	// cruft std::map<std::string, LLChatHandler*> mChatHandlers; + +	std::map<std::string, LLBoundListener> mChannelListeners;  };  } diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index a4f6921f98..7301b305b2 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -875,8 +875,15 @@ void LLPanelFace::getState()  			{  				getChild<LLUICtrl>("TexScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() );  				getChild<LLUICtrl>("TexScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() ); -			} +				// EXP-1507 (change label based on the mapping mode) +				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per meter")); +			} +			else +			if (selected_texgen == 0)  // FIXME: should not be magic numbers +			{ +				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per face")); +			}  		}  		{ diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index fbe331c7ab..f825ee3215 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -749,7 +749,10 @@ LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()  LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()  { -	gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName()); +	if (mMembersList) +	{ +		gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName()); +	}  }  BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root) diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 0295ad151f..eda0749cdb 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -374,7 +374,7 @@ void LLPanelGroupControlPanel::draw()  {  	// Need to resort the participant list if it's in sort by recent speaker order.  	if (mParticipantList) -		mParticipantList->updateRecentSpeakersOrder(); +		mParticipantList->update();  	LLPanelChatControlPanel::draw();  } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 058d1ad6bc..76aadcd913 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -216,6 +216,7 @@ void LLPanelLogin::addUsersWithFavoritesToUsername()  void LLPanelLogin::addFavoritesToStartLocation()  { +	// Clear the combo.  	LLComboBox* combo = getChild<LLComboBox>("start_location_combo");  	if (!combo) return;  	int num_items = combo->getItemCount(); @@ -223,6 +224,10 @@ void LLPanelLogin::addFavoritesToStartLocation()  	{  		combo->remove(i);  	} + +	// Load favorites into the combo. +	std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple(); +	std::string canonical_user_name = canonicalize_username(user_defined_name);  	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");  	LLSD fav_llsd;  	llifstream file; @@ -232,15 +237,18 @@ void LLPanelLogin::addFavoritesToStartLocation()  	for (LLSD::map_const_iterator iter = fav_llsd.beginMap();  		iter != fav_llsd.endMap(); ++iter)  	{ -		std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple(); -  		// The account name in stored_favorites.xml has Resident last name even if user has  		// a single word account name, so it can be compared case-insensitive with the  		// user defined "firstname lastname". -		S32 res = LLStringUtil::compareInsensitive(canonicalize_username(user_defined_name), iter->first); -		if (res != 0) continue; +		S32 res = LLStringUtil::compareInsensitive(canonical_user_name, iter->first); +		if (res != 0) +		{ +			lldebugs << "Skipping favorites for " << iter->first << llendl; +			continue; +		}  		combo->addSeparator(); +		lldebugs << "Loading favorites for " << iter->first << llendl;  		LLSD user_llsd = iter->second;  		for (LLSD::array_const_iterator iter1 = user_llsd.beginArray();  			iter1 != user_llsd.endArray(); ++iter1) diff --git a/indra/newview/llpanelvoiceeffect.cpp b/indra/newview/llpanelvoiceeffect.cpp index 4bbfec8ab7..5fec6d967d 100644 --- a/indra/newview/llpanelvoiceeffect.cpp +++ b/indra/newview/llpanelvoiceeffect.cpp @@ -123,7 +123,6 @@ void LLPanelVoiceEffect::update(bool list_updated)  	if (mVoiceEffectCombo)  	{  		LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface(); -		llassert(effect_interface);  		if (!effect_interface) return;  		if (list_updated)  		{ diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 5c95e805ce..975a6c67d8 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -390,7 +390,10 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)  		{  			const LLPointer<LLSpeaker>& speakerp = *it; -			update_speaker_indicator(list, speakerp->mID, speakerp->mModeratorMutedVoice); +			if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY) +			{ +				update_speaker_indicator(list, speakerp->mID, speakerp->mModeratorMutedVoice); +			}  		}  	}  } @@ -466,12 +469,12 @@ void LLParticipantList::setValidateSpeakerCallback(validate_speaker_callback_t c  	mValidateSpeakerCallback = cb;  } -void LLParticipantList::updateRecentSpeakersOrder() +void LLParticipantList::update()  { +	mSpeakerMgr->update(true); +  	if (E_SORT_BY_RECENT_SPEAKERS == getSortOrder() && !isHovered())  	{ -		// Need to update speakers to sort list correctly -		mSpeakerMgr->update(true);  		// Resort avatar list  		sort();  	} @@ -760,6 +763,7 @@ void LLParticipantList::LLParticipantListMenu::toggleMute(const LLSD& userdata,  	LLPointer<LLSpeaker> speakerp = mParent.mSpeakerMgr->findSpeaker(speaker_id);  	if (speakerp.isNull())  	{ +		LL_WARNS("Speakers") << "Speaker " << speaker_id << " not found" << llendl;  		return;  	}  	LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*>(mParent.mAvatarList->getItemByValue(speaker_id)); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index a001d29b67..53966c15fe 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -72,9 +72,9 @@ public:  	const EParticipantSortOrder getSortOrder() const;  	/** -	 * Refreshes the participant list if it's in sort by recent speaker order. +	 * Refreshes the participant list.  	 */ -	void updateRecentSpeakersOrder(); +	void update();  	/**  	 * Set a callback to be called before adding a speaker. Invalid speakers will not be added. diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp index 225ac6e224..fe4cc0f55f 100644 --- a/indra/newview/llplacesinventorybridge.cpp +++ b/indra/newview/llplacesinventorybridge.cpp @@ -89,7 +89,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		std::vector<std::string> items;  		std::vector<std::string> disabled_items; -		LLInventoryPanel* inv_panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); +		LLInventoryPanel* inv_panel = mInventoryPanel.get();  		bool is_open = false;  		if (inv_panel)  		{ @@ -137,7 +137,7 @@ void LLPlacesFolderBridge::performAction(LLInventoryModel* model, std::string ac  LLFolderViewFolder* LLPlacesFolderBridge::getFolder()  {  	LLFolderViewFolder* folder = NULL; -	LLInventoryPanel* inv_panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); +	LLInventoryPanel* inv_panel = mInventoryPanel.get();  	if (inv_panel)  	{  		folder = dynamic_cast<LLFolderViewFolder*>(inv_panel->getRootFolder()->getItemByID(mUUID)); diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h index 896e17c3c3..759430c3a5 100644 --- a/indra/newview/llpreview.h +++ b/indra/newview/llpreview.h @@ -32,6 +32,7 @@  #include "llpointer.h"  #include "lluuid.h"  #include "llinventoryobserver.h" +#include "llextendedstatus.h"  #include <map>  class LLInventoryItem; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 5301955964..1045009a04 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -195,17 +195,18 @@ LLScreenChannel::~LLScreenChannel()  } -std::list<LLToast*> LLScreenChannel::findToasts(const Matcher& matcher) +std::list<const LLToast*> LLScreenChannel::findToasts(const Matcher& matcher)  { -	std::list<LLToast*> res; +	std::list<const LLToast*> res;  	// collect stored toasts  	for (std::vector<ToastElem>::iterator it = mStoredToastList.begin(); it  			!= mStoredToastList.end(); it++)  	{ -		if (matcher.matches(it->toast->getNotification())) +		const LLToast* toast = it->getToast(); +		if (toast && matcher.matches(toast->getNotification()))  		{ -			res.push_back(it->toast); +			res.push_back(toast);  		}  	} @@ -213,9 +214,10 @@ std::list<LLToast*> LLScreenChannel::findToasts(const Matcher& matcher)  	for (std::vector<ToastElem>::iterator it = mToastList.begin(); it  			!= mToastList.end(); it++)  	{ -		if (matcher.matches(it->toast->getNotification())) +		const LLToast* toast = it->getToast(); +		if (toast && matcher.matches(toast->getNotification()))  		{ -			res.push_back(it->toast); +			res.push_back(toast);  		}  	} @@ -260,15 +262,16 @@ void LLScreenChannel::addToast(const LLToast::Params& p)  		return;  	} -	ToastElem new_toast_elem(p); +	LLToast* toast = new LLToast(p); +	ToastElem new_toast_elem(toast->getHandle()); -	new_toast_elem.toast->setOnFadeCallback(boost::bind(&LLScreenChannel::onToastFade, this, _1)); -	new_toast_elem.toast->setOnToastDestroyedCallback(boost::bind(&LLScreenChannel::onToastDestroyed, this, _1)); +	toast->setOnFadeCallback(boost::bind(&LLScreenChannel::onToastFade, this, _1)); +	toast->setOnToastDestroyedCallback(boost::bind(&LLScreenChannel::onToastDestroyed, this, _1));  	if(mControlHovering)  	{ -		new_toast_elem.toast->setOnToastHoverCallback(boost::bind(&LLScreenChannel::onToastHover, this, _1, _2)); -		new_toast_elem.toast->setMouseEnterCallback(boost::bind(&LLScreenChannel::stopToastTimer, this, new_toast_elem.toast)); -		new_toast_elem.toast->setMouseLeaveCallback(boost::bind(&LLScreenChannel::startToastTimer, this, new_toast_elem.toast)); +		toast->setOnToastHoverCallback(boost::bind(&LLScreenChannel::onToastHover, this, _1, _2)); +		toast->setMouseEnterCallback(boost::bind(&LLScreenChannel::stopToastTimer, this, toast)); +		toast->setMouseLeaveCallback(boost::bind(&LLScreenChannel::startToastTimer, this, toast));  	}  	if(show_toast) @@ -324,8 +327,8 @@ void LLScreenChannel::onToastFade(LLToast* toast)  		bool delete_toast = !mCanStoreToasts || !toast->getCanBeStored();  		if(delete_toast)  		{ -			mToastList.erase(it);  			deleteToast(toast); +			mToastList.erase(it);  		}  		else  		{ @@ -340,13 +343,13 @@ void LLScreenChannel::onToastFade(LLToast* toast)  //--------------------------------------------------------------------------  void LLScreenChannel::deleteToast(LLToast* toast)  { -	if (toast->isDead()) +	if (!toast || toast->isDead())  	{  		return;  	}  	// send signal to observers about destroying of a toast -	toast->mOnDeleteToastSignal(toast); +	toast->closeToast();  	// update channel's Hovering state  	// turning hovering off manually because onMouseLeave won't happen if a toast was closed using a keyboard @@ -354,9 +357,6 @@ void LLScreenChannel::deleteToast(LLToast* toast)  	{  		mHoveredToast  = NULL;  	} - -	// close the toast -	toast->closeFloater();  }  //-------------------------------------------------------------------------- @@ -364,12 +364,16 @@ void LLScreenChannel::deleteToast(LLToast* toast)  void LLScreenChannel::storeToast(ToastElem& toast_elem)  {  	// do not store clones -	std::vector<ToastElem>::iterator it = find(mStoredToastList.begin(), mStoredToastList.end(), toast_elem.id); +	std::vector<ToastElem>::iterator it = find(mStoredToastList.begin(), mStoredToastList.end(), toast_elem.getID());  	if( it != mStoredToastList.end() )  		return; -	mStoredToastList.push_back(toast_elem); -	mOnStoreToast(toast_elem.toast->getPanel(), toast_elem.id); +	const LLToast* toast = toast_elem.getToast(); +	if (toast) +	{ +		mStoredToastList.push_back(toast_elem); +		mOnStoreToast(toast->getPanel(), toast->getNotificationID()); +	}  }  //-------------------------------------------------------------------------- @@ -382,9 +386,13 @@ void LLScreenChannel::loadStoredToastsToChannel()  	for(it = mStoredToastList.begin(); it != mStoredToastList.end(); ++it)  	{ -		(*it).toast->setIsHidden(false); -		(*it).toast->startTimer(); -		mToastList.push_back((*it)); +		LLToast* toast = it->getToast(); +		if (toast) +		{ +			toast->setIsHidden(false); +			toast->startTimer(); +			mToastList.push_back(*it); +		}  	}  	mStoredToastList.clear(); @@ -399,17 +407,19 @@ void LLScreenChannel::loadStoredToastByNotificationIDToChannel(LLUUID id)  	if( it == mStoredToastList.end() )  		return; -	LLToast* toast = (*it).toast; - -	if(toast->getVisible()) +	LLToast* toast = it->getToast(); +	if (toast)  	{ -		// toast is already in channel -		return; -	} +		if(toast->getVisible()) +		{ +			// toast is already in channel +			return; +		} -	toast->setIsHidden(false); -	toast->startTimer(); -	mToastList.push_back((*it)); +		toast->setIsHidden(false); +		toast->startTimer(); +		mToastList.push_back(*it); +	}  	redrawToasts();  } @@ -423,9 +433,19 @@ void LLScreenChannel::removeStoredToastByNotificationID(LLUUID id)  	if( it == mStoredToastList.end() )  		return; -	LLToast* toast = (*it).toast; -	mStoredToastList.erase(it); -	mRejectToastSignal(toast->getNotificationID()); +	const LLToast* toast = it->getToast(); +	if (toast) +	{ +		mRejectToastSignal(toast->getNotificationID()); +	} + +	// Call find() once more, because the mStoredToastList could have been changed +	// in mRejectToastSignal callback and the iterator could have become invalid. +	it = find(mStoredToastList.begin(), mStoredToastList.end(), id); +	if (it != mStoredToastList.end()) +	{ +		mStoredToastList.erase(it); +	}  }  //-------------------------------------------------------------------------- @@ -436,21 +456,22 @@ void LLScreenChannel::killToastByNotificationID(LLUUID id)  	if( it != mToastList.end())  	{ -		LLToast* toast = (*it).toast; +		LLToast* toast = it->getToast();  		// if it is a notification toast and notification is UnResponded - then respond on it  		// else - simply destroy a toast  		//  		// NOTE:	if a notification is unresponded this function will be called twice for the same toast.  		//			At first, the notification will be discarded, at second (it will be caused by discarding),  		//			the toast will be destroyed. -		if(toast->isNotificationValid()) +		if(toast && toast->isNotificationValid())  		{  			mRejectToastSignal(toast->getNotificationID());  		}  		else  		{ -			mToastList.erase(it); +  			deleteToast(toast); +			mToastList.erase(it);  			redrawToasts();  		}  		return; @@ -459,20 +480,31 @@ void LLScreenChannel::killToastByNotificationID(LLUUID id)  	// searching among stored toasts  	it = find(mStoredToastList.begin(), mStoredToastList.end(), id); -	if( it != mStoredToastList.end() ) +	if (it != mStoredToastList.end()) +	{ +		LLToast* toast = it->getToast(); +		if (toast) +		{ +			// send signal to a listener to let him perform some action on toast rejecting +			mRejectToastSignal(toast->getNotificationID()); +			deleteToast(toast); +		} +	} + +	// Call find() once more, because the mStoredToastList could have been changed +	// in mRejectToastSignal callback and the iterator could have become invalid. +	it = find(mStoredToastList.begin(), mStoredToastList.end(), id); +	if (it != mStoredToastList.end())  	{ -		LLToast* toast = (*it).toast;  		mStoredToastList.erase(it); -		// send signal to a listener to let him perform some action on toast rejecting -		mRejectToastSignal(toast->getNotificationID()); -		deleteToast(toast);  	} +  }  void LLScreenChannel::killMatchedToasts(const Matcher& matcher)  { -	std::list<LLToast*> to_delete = findToasts(matcher); -	for (std::list<LLToast*>::iterator it = to_delete.begin(); it +	std::list<const LLToast*> to_delete = findToasts(matcher); +	for (std::list<const LLToast*>::iterator it = to_delete.begin(); it  			!= to_delete.end(); it++)  	{  		killToastByNotificationID((*it)-> getNotificationID()); @@ -486,12 +518,15 @@ void LLScreenChannel::modifyToastByNotificationID(LLUUID id, LLPanel* panel)  	if( it != mToastList.end() && panel)  	{ -		LLToast* toast = (*it).toast; -		LLPanel* old_panel = toast->getPanel(); -		toast->removeChild(old_panel); -		delete old_panel; -		toast->insertPanel(panel); -		toast->startTimer(); +		LLToast* toast = it->getToast(); +		if (toast) +		{ +			LLPanel* old_panel = toast->getPanel(); +			toast->removeChild(old_panel); +			delete old_panel; +			toast->insertPanel(panel); +			toast->startTimer(); +		}  		redrawToasts();  	}  } @@ -540,16 +575,29 @@ void LLScreenChannel::showToastsBottom()  	{  		if(it != mToastList.rbegin())  		{ -			LLToast* toast = (*(it-1)).toast; +			LLToast* toast = (it-1)->getToast(); +			if (!toast) +			{ +				llwarns << "Attempt to display a deleted toast." << llendl; +				return; +			} +  			bottom = toast->getRect().mTop - toast->getTopPad();  			toast_margin = gSavedSettings.getS32("ToastGap");  		} -		toast_rect = (*it).toast->getRect(); +		LLToast* toast = it->getToast(); +		if(!toast) +		{ +			llwarns << "Attempt to display a deleted toast." << llendl; +			return; +		} + +		toast_rect = toast->getRect();  		toast_rect.setOriginAndSize(getRect().mRight - toast_rect.getWidth(),  				bottom + toast_margin, toast_rect.getWidth(),  				toast_rect.getHeight()); -		(*it).toast->setRect(toast_rect); +		toast->setRect(toast_rect);  		if(floater && floater->overlapsScreenChannel())  		{ @@ -561,7 +609,7 @@ void LLScreenChannel::showToastsBottom()  				{  					shift += floater->getDockControl()->getTongueHeight();  				} -				(*it).toast->translate(0, shift); +				toast->translate(0, shift);  			}  			LLRect channel_rect = getChannelRect(); @@ -572,13 +620,13 @@ void LLScreenChannel::showToastsBottom()  			}  		} -		bool stop_showing_toasts = (*it).toast->getRect().mTop > getRect().mTop; +		bool stop_showing_toasts = toast->getRect().mTop > getRect().mTop;  		if(!stop_showing_toasts)  		{  			if( it != mToastList.rend()-1)  			{ -				S32 toast_top = (*it).toast->getRect().mTop + gSavedSettings.getS32("ToastGap"); +				S32 toast_top = toast->getRect().mTop + gSavedSettings.getS32("ToastGap");  				stop_showing_toasts = toast_top > getRect().mTop;  			}  		}  @@ -592,17 +640,17 @@ void LLScreenChannel::showToastsBottom()  		if(stop_showing_toasts)  			break; -		if( !(*it).toast->getVisible() ) +		if( !toast->getVisible() )  		{  			// HACK  			// EXT-2653: it is necessary to prevent overlapping for secondary showed toasts -			(*it).toast->setVisible(TRUE); +			toast->setVisible(TRUE);  		}		 -		if(!(*it).toast->hasFocus()) +		if(!toast->hasFocus())  		{  			// Fixing Z-order of toasts (EXT-4862)  			// Next toast will be positioned under this one. -			gFloaterView->sendChildToBack((*it).toast); +			gFloaterView->sendChildToBack(toast);  		}  	} @@ -612,7 +660,11 @@ void LLScreenChannel::showToastsBottom()  		mHiddenToastsNum = 0;  		for(; it != mToastList.rend(); it++)  		{ -			(*it).toast->hide(); +			LLToast* toast = it->getToast(); +			if (toast) +			{ +				toast->hide(); +			}  		}  	}  } @@ -620,17 +672,31 @@ void LLScreenChannel::showToastsBottom()  //--------------------------------------------------------------------------  void LLScreenChannel::showToastsCentre()  { -	LLRect	toast_rect;	 -	S32		bottom = (getRect().mTop - getRect().mBottom)/2 + mToastList[0].toast->getRect().getHeight()/2; +	LLToast* toast = mToastList[0].getToast(); +	if (!toast) +	{ +		llwarns << "Attempt to display a deleted toast." << llendl; +		return; +	} + +	LLRect	toast_rect; +	S32		bottom = (getRect().mTop - getRect().mBottom)/2 + toast->getRect().getHeight()/2;  	std::vector<ToastElem>::reverse_iterator it;  	for(it = mToastList.rbegin(); it != mToastList.rend(); ++it)  	{ -		toast_rect = (*it).toast->getRect(); +		LLToast* toast = it->getToast(); +		if (!toast) +		{ +			llwarns << "Attempt to display a deleted toast." << llendl; +			return; +		} + +		toast_rect = toast->getRect();  		toast_rect.setLeftTopAndSize(getRect().mLeft - toast_rect.getWidth() / 2, bottom + toast_rect.getHeight() / 2 + gSavedSettings.getS32("ToastGap"), toast_rect.getWidth() ,toast_rect.getHeight()); -		(*it).toast->setRect(toast_rect); +		toast->setRect(toast_rect); -		(*it).toast->setVisible(TRUE);	 +		toast->setVisible(TRUE);  	}  } @@ -652,16 +718,29 @@ void LLScreenChannel::showToastsTop()  	{  		if(it != mToastList.rbegin())  		{ -			LLToast* toast = (*(it-1)).toast; +			LLToast* toast = (it-1)->getToast(); +			if (!toast) +			{ +				llwarns << "Attempt to display a deleted toast." << llendl; +				return; +			} +  			top = toast->getRect().mBottom - toast->getTopPad();  			toast_margin = gSavedSettings.getS32("ToastGap");  		} -		toast_rect = (*it).toast->getRect(); +		LLToast* toast = it->getToast(); +		if (!toast) +		{ +			llwarns << "Attempt to display a deleted toast." << llendl; +			return; +		} + +		toast_rect = toast->getRect();  		toast_rect.setLeftTopAndSize(channel_rect.mRight - toast_rect.getWidth(),  			top, toast_rect.getWidth(),  			toast_rect.getHeight()); -		(*it).toast->setRect(toast_rect); +		toast->setRect(toast_rect);  		if(floater && floater->overlapsScreenChannel())  		{ @@ -673,7 +752,7 @@ void LLScreenChannel::showToastsTop()  				{  					shift -= floater->getDockControl()->getTongueHeight();  				} -				(*it).toast->translate(0, shift); +				toast->translate(0, shift);  			}  			LLRect channel_rect = getChannelRect(); @@ -684,13 +763,13 @@ void LLScreenChannel::showToastsTop()  			}  		} -		bool stop_showing_toasts = (*it).toast->getRect().mBottom < channel_rect.mBottom; +		bool stop_showing_toasts = toast->getRect().mBottom < channel_rect.mBottom;  		if(!stop_showing_toasts)  		{  			if( it != mToastList.rend()-1)  			{ -				S32 toast_bottom = (*it).toast->getRect().mBottom - gSavedSettings.getS32("ToastGap"); +				S32 toast_bottom = toast->getRect().mBottom - gSavedSettings.getS32("ToastGap");  				stop_showing_toasts = toast_bottom < channel_rect.mBottom;  			}  		}  @@ -704,17 +783,17 @@ void LLScreenChannel::showToastsTop()  		if(stop_showing_toasts)  			break; -		if( !(*it).toast->getVisible() ) +		if (!toast->getVisible())  		{  			// HACK  			// EXT-2653: it is necessary to prevent overlapping for secondary showed toasts -			(*it).toast->setVisible(TRUE); +			toast->setVisible(TRUE);  		}		 -		if(!(*it).toast->hasFocus()) +		if (!toast->hasFocus())  		{  			// Fixing Z-order of toasts (EXT-4862)  			// Next toast will be positioned under this one. -			gFloaterView->sendChildToBack((*it).toast); +			gFloaterView->sendChildToBack(toast);  		}  	} @@ -724,7 +803,11 @@ void LLScreenChannel::showToastsTop()  		mHiddenToastsNum = 0;  		for(; it != mToastList.rend(); it++)  		{ -			(*it).toast->hide(); +			LLToast* toast = it->getToast(); +			if (toast) +			{ +				toast->hide(); +			}  		}  	}  } @@ -827,7 +910,17 @@ void LLNotificationsUI::LLScreenChannel::startToastTimer(LLToast* toast)  void LLScreenChannel::hideToastsFromScreen()  {  	for(std::vector<ToastElem>::iterator it = mToastList.begin(); it != mToastList.end(); it++) -		(*it).toast->setVisible(FALSE); +	{ +		LLToast* toast = it->getToast(); +		if (toast) +		{ +			toast->setVisible(FALSE); +		} +		else +		{ +			llwarns << "Attempt to hide a deleted toast." << llendl; +		} +	}  }  //-------------------------------------------------------------------------- @@ -836,8 +929,15 @@ void LLScreenChannel::hideToast(const LLUUID& notification_id)  	std::vector<ToastElem>::iterator it = find(mToastList.begin(), mToastList.end(), notification_id);  	if(mToastList.end() != it)  	{ -		ToastElem te = *it; -		te.toast->hide(); +		LLToast* toast = it->getToast(); +		if (toast) +		{ +			toast->hide(); +		} +		else +		{ +			llwarns << "Attempt to hide a deleted toast." << llendl; +		}  	}  } @@ -845,24 +945,25 @@ void LLScreenChannel::closeHiddenToasts(const Matcher& matcher)  {  	// since we can't guarantee that close toast operation doesn't change mToastList  	// we collect matched toasts that should be closed into separate list -	std::list<ToastElem> toasts; +	std::list<LLToast*> toasts;  	for (std::vector<ToastElem>::iterator it = mToastList.begin(); it  			!= mToastList.end(); it++)  	{ -		LLToast * toast = it->toast; +		LLToast* toast = it->getToast();  		// add to list valid toast that match to provided matcher criteria  		if (toast != NULL && !toast->isDead() && toast->getNotification() != NULL  				&& !toast->getVisible() && matcher.matches(toast->getNotification()))  		{ -			toasts.push_back(*it); +			toasts.push_back(toast);  		}  	}  	// close collected toasts -	for (std::list<ToastElem>::iterator it = toasts.begin(); it +	for (std::list<LLToast*>::iterator it = toasts.begin(); it  			!= toasts.end(); it++)  	{ -		it->toast->closeFloater(); +		LLToast* toast = *it; +		toast->closeFloater();  	}  } @@ -872,7 +973,7 @@ void LLScreenChannel::removeToastsFromChannel()  	hideToastsFromScreen();  	for(std::vector<ToastElem>::iterator it = mToastList.begin(); it != mToastList.end(); it++)  	{ -		deleteToast((*it).toast); +		deleteToast(it->getToast());  	}  	mToastList.clear();  } @@ -886,9 +987,10 @@ void LLScreenChannel::removeAndStoreAllStorableToasts()  	hideToastsFromScreen();  	for(std::vector<ToastElem>::iterator it = mToastList.begin(); it != mToastList.end();)  	{ -		if((*it).toast->getCanBeStored()) +		LLToast* toast = it->getToast(); +		if(toast && toast->getCanBeStored())  		{ -			storeToast(*(it)); +			storeToast(*it);  			it = mToastList.erase(it);  		}  		else @@ -908,9 +1010,10 @@ void LLScreenChannel::removeToastsBySessionID(LLUUID id)  	hideToastsFromScreen();  	for(std::vector<ToastElem>::iterator it = mToastList.begin(); it != mToastList.end();)  	{ -		if((*it).toast->getSessionID() == id) +		LLToast* toast = it->getToast(); +		if(toast && toast->getSessionID() == id)  		{ -			deleteToast((*it).toast); +			deleteToast(toast);  			it = mToastList.erase(it);  		}  		else @@ -968,5 +1071,5 @@ LLToast* LLScreenChannel::getToastByNotificationID(LLUUID id)  	if (it == mStoredToastList.end())  		return NULL; -	return it->toast; +	return it->getToast();  } diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index c9f8855fe6..695b6cd44d 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -163,7 +163,7 @@ public:  		virtual bool matches(const LLNotificationPtr) const = 0;  	}; -	std::list<LLToast*> findToasts(const Matcher& matcher); +	std::list<const LLToast*> findToasts(const Matcher& matcher);  	// Channel's outfit-functions  	// update channel's size and position in the World View @@ -238,31 +238,39 @@ public:  	reject_tost_signal_t mRejectToastSignal; boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); }  private: -	struct ToastElem +	class ToastElem  	{ -		LLUUID		id; -		LLToast*	toast; +	public: +		ToastElem(const LLHandle<LLToast>& toast) : mToast(toast) +		{ +		} -		ToastElem(LLToast::Params p) : id(p.notif_id) +		ToastElem(const ToastElem& toast_elem) : mToast(toast_elem.mToast)  		{ -			toast = new LLToast(p);  		} -		ToastElem(const ToastElem& toast_elem) +		LLToast* getToast() const  		{ -			id = toast_elem.id; -			toast = toast_elem.toast; +			return mToast.get(); +		} + +		LLUUID getID() const +		{ +			return mToast.isDead() ? LLUUID() : mToast.get()->getNotificationID();  		}  		bool operator == (const LLUUID &id_op) const  		{ -			return (id == id_op); +			return (getID() == id_op);  		}  		bool operator == (LLPanel* panel_op) const  		{ -			return (toast == panel_op); +			return (mToast.get() == panel_op);  		} + +	private: +		LLHandle<LLToast>	mToast;  	};  	// Channel's handlers diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 8d64c8c04f..30400a4c6a 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -1360,7 +1360,11 @@ void LLSecAPIBasicHandler::_writeProtectedData()  		// (even though this file isn't really secure.  Perhaps in the future  		// it may be, however.  		LLFile::remove(tmp_filename); -		throw LLProtectedDataException("Error writing Protected Data Store"); + +		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() +		// Decided throwing an exception here was overkill until we figure out why this happens +		//throw LLProtectedDataException("Error writing Protected Data Store"); +		llinfos << "LLProtectedDataException(Error writing Protected Data Store)" << llendl;  	}  	// move the temporary file to the specified file location. @@ -1369,7 +1373,11 @@ void LLSecAPIBasicHandler::_writeProtectedData()  	   (LLFile::rename(tmp_filename, mProtectedDataFilename)))  	{  		LLFile::remove(tmp_filename); -		throw LLProtectedDataException("Could not overwrite protected data store"); + +		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() +		// Decided throwing an exception here was overkill until we figure out why this happens +		//throw LLProtectedDataException("Could not overwrite protected data store"); +		llinfos << "LLProtectedDataException(Could not overwrite protected data store)" << llendl;  	}  } diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 038b18afbd..c8b67cc9ec 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -217,15 +217,17 @@ BOOL LLSidepanelInventory::postBuild()  	{  		LLLayoutStack* inv_stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME); -		// Collapse inbox panel -		inv_stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), true); -		  		// Set up button states and callbacks  		LLButton * inbox_button = getChild<LLButton>(INBOX_BUTTON_NAME); -		inbox_button->setToggleState(false);  		inbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleInboxBtn, this)); +		// Get the previous inbox state from "InventoryInboxToggleState" setting. +		bool is_inbox_collapsed = !inbox_button->getToggleState(); + +		// Restore the collapsed inbox panel state +		inv_stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), is_inbox_collapsed); +  		// Set the inbox visible based on debug settings (final setting comes from http request below)  		enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox")); diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index c588bd8fb4..07d2f1ad6f 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -272,6 +272,7 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin  		speakerp->mStatus = status;  		mSpeakers.insert(std::make_pair(speakerp->mID, speakerp));  		mSpeakersSorted.push_back(speakerp); +		LL_DEBUGS("Speakers") << "Added speaker " << id << llendl;  		fireEvent(new LLSpeakerListChangeEvent(this, speakerp->mID), "add");  	}  	else @@ -290,6 +291,10 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin  				speakerp->lookupName();  			}  		} +		else +		{ +			LL_WARNS("Speakers") << "Speaker " << id << " not found" << llendl; +		}  	}  	mSpeakerDelayRemover->unsetActionTimer(speakerp->mID); @@ -354,6 +359,7 @@ void LLSpeakerMgr::update(BOOL resort_ok)  			if (moderator_muted_voice != speakerp->mModeratorMutedVoice)  			{  				speakerp->mModeratorMutedVoice = moderator_muted_voice; +				LL_DEBUGS("Speakers") << (speakerp->mModeratorMutedVoice? "Muted" : "Umuted") << " speaker " << speaker_id<< llendl;  				speakerp->fireEvent(new LLSpeakerVoiceModerationEvent(speakerp));  			} @@ -484,6 +490,7 @@ bool LLSpeakerMgr::removeSpeaker(const LLUUID& speaker_id)  		}  	} +	LL_DEBUGS("Speakers") << "Removed speaker " << speaker_id << llendl;  	fireEvent(new LLSpeakerListChangeEvent(this, speaker_id), "remove");  	update(TRUE); @@ -595,7 +602,10 @@ void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers)  					speaker_it->second["mutes"]["text"];  				// Fire event only if moderator changed  				if ( is_moderator != speakerp->mIsModerator ) +				{ +					LL_DEBUGS("Speakers") << "Speaker " << agent_id << (is_moderator ? "is now" : "no longer is") << " a moderator" << llendl;  					fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator"); +				}  			}  		}  	} @@ -665,7 +675,10 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)  					speakerp->mIsModerator = agent_info["is_moderator"];  					// Fire event only if moderator changed  					if ( is_moderator != speakerp->mIsModerator ) +					{ +						LL_DEBUGS("Speakers") << "Speaker " << agent_id << (is_moderator ? "is now" : "no longer is") << " a moderator" << llendl;  						fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator"); +					}  				}  				if (agent_info.has("mutes")) @@ -857,6 +870,7 @@ void LLActiveSpeakerMgr::updateSpeakerList()  	// always populate from active voice channel  	if (LLVoiceChannel::getCurrentVoiceChannel() != mVoiceChannel) //MA: seems this is always false  	{ +		LL_DEBUGS("Speakers") << "Removed all speakers" << llendl;  		fireEvent(new LLSpeakerListChangeEvent(this, LLUUID::null), "clear");  		mSpeakers.clear();  		mSpeakersSorted.clear(); diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index 35f2ee7056..b9358cf37c 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -208,6 +208,8 @@ private:  class LLSpeakerMgr : public LLOldEvents::LLObservable  { +	LOG_CLASS(LLSpeakerMgr); +  public:  	LLSpeakerMgr(LLVoiceChannel* channelp);  	virtual ~LLSpeakerMgr(); @@ -271,6 +273,8 @@ protected:  class LLIMSpeakerMgr : public LLSpeakerMgr  { +	LOG_CLASS(LLIMSpeakerMgr); +  public:  	LLIMSpeakerMgr(LLVoiceChannel* channel); @@ -320,6 +324,8 @@ protected:  class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeakerMgr>  { +	LOG_CLASS(LLActiveSpeakerMgr); +  public:  	LLActiveSpeakerMgr();  protected: @@ -328,6 +334,7 @@ protected:  class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLLocalSpeakerMgr>  { +	LOG_CLASS(LLLocalSpeakerMgr);  public:  	LLLocalSpeakerMgr();  	~LLLocalSpeakerMgr (); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 3923b4510a..0ac8c1fe39 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -880,7 +880,6 @@ bool idle_startup()  		LLFile::mkdir(gDirUtilp->getLindenUserDir());  		// Set PerAccountSettingsFile to the default value. -		std::string per_account_settings_file = LLAppViewer::instance()->getSettingsFilename("Default", "PerAccount");  		gSavedSettings.setString("PerAccountSettingsFile",  			gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,   				LLAppViewer::instance()->getSettingsFilename("Default", "PerAccount"))); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index de22f2ae6b..e26d2e001c 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -922,7 +922,7 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)  	S32 image_top = getRect().getHeight();  	S32 image_bottom = BTN_HEIGHT_SMALL;  	S32 image_middle = (image_top + image_bottom) / 2; -	S32 line_height = llround(LLFontGL::getFontSansSerifSmall()->getLineHeight()); +	S32 line_height = LLFontGL::getFontSansSerifSmall()->getLineHeight();  	LLTextBox::Params tentative_label_p(p.multiselect_text);  	tentative_label_p.name("Multiple"); diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 1c89766b26..5b41a05f2a 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -386,7 +386,7 @@ public:  		Params()  		:	texture_view("texture_view")  		{ -			S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +			S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  			changeDefault(rect, LLRect(0,0,100,line_height * 4));  		}  	}; @@ -411,7 +411,7 @@ void LLAvatarTexBar::draw()  	LLVOAvatarSelf* avatarp = gAgentAvatarp;  	if (!avatarp) return; -	const S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +	const S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  	const S32 v_offset = 0;  	const S32 l_offset = 3; @@ -485,7 +485,7 @@ public:  		Params()  		:	texture_view("texture_view")  		{ -			S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +			S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  			changeDefault(rect, LLRect(0,0,100,line_height * 4));  		}  	}; @@ -512,7 +512,7 @@ void LLGLTexMemBar::draw()  	F32 discard_bias = LLViewerTexture::sDesiredDiscardBias;  	F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ;  	F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ; -	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +	S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  	S32 v_offset = (S32)((texture_bar_height + 2.2f) * mTextureView->mNumTextureBars + 2.0f);  	F32 total_texture_downloaded = (F32)gTotalTextureBytes / (1024 * 1024);  	F32 total_object_downloaded = (F32)gTotalObjectBytes / (1024 * 1024); @@ -1097,7 +1097,7 @@ void LLTextureSizeView::drawTextureSizeGraph()  {  	if(mTextureSizeBar.size() == 0)  	{ -		S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +		S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  		mTextureSizeBar.resize(LLImageGL::sTextureLoadedCounter.size()) ;  		mTextureSizeBarRect.set(700, line_height * 2 + 400, 700 + mTextureSizeBar.size() * mTextureSizeBarWidth, line_height * 2) ; @@ -1140,7 +1140,7 @@ F32 LLTextureSizeView::drawTextureSizeDistributionGraph()  		}  	} -	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +	S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  	S32 left = mTextureSizeBarRect.mLeft ;  	S32 bottom = mTextureSizeBarRect.mBottom ;  	S32 right = mTextureSizeBarRect.mRight ; @@ -1222,7 +1222,7 @@ void LLTextureSizeView::drawTextureCategoryGraph()  {  	if(mTextureSizeBar.size() == 0)  	{ -		S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +		S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  		mTextureSizeBar.resize(LLViewerTexture::getTotalNumOfCategories()) ;  		mTextureSizeBarRect.set(700, line_height * 2 + 400, 700 + mTextureSizeBar.size() * mTextureSizeBarWidth, line_height * 2) ; @@ -1267,7 +1267,7 @@ F32 LLTextureSizeView::drawTextureCategoryDistributionGraph()  		}  	} -	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +	S32 line_height = LLFontGL::getFontMonospace()->getLineHeight();  	S32 left = mTextureSizeBarRect.mLeft ;  	S32 bottom = mTextureSizeBarRect.mBottom ;  	S32 right = mTextureSizeBarRect.mRight ; diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index da691a2d0c..cdc611f7af 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -215,6 +215,13 @@ void LLToast::setFadingTime(S32 seconds)  	mToastFadingTime = seconds;  } +void LLToast::closeToast() +{ +	mOnDeleteToastSignal(this); + +	closeFloater(); +} +  S32 LLToast::getTopPad()  {  	if(mWrapperPanel) @@ -296,9 +303,7 @@ void LLToast::reshapeToPanel()  	if(!panel)  		return; -	LLRect panel_rect = panel->getRect(); - -	panel_rect.setLeftTopAndSize(0, panel_rect.getHeight(), panel_rect.getWidth(), panel_rect.getHeight()); +	LLRect panel_rect = panel->getLocalRect();  	panel->setShape(panel_rect);  	LLRect toast_rect = getRect(); diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 0b06728935..e1d99b1bcb 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -75,6 +75,7 @@ class LLToast : public LLModalDialog, public LLInstanceTracker<LLToast>  public:  	typedef boost::function<void (LLToast* toast)> toast_callback_t;  	typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t; +	typedef boost::signals2::signal<void (LLToast* toast, bool mouse_enter)> toast_hover_check_signal_t;  	struct Params : public LLInitParam::Block<Params>  	{ @@ -131,7 +132,7 @@ public:  	void reshapeToPanel();  	// get toast's panel -	LLPanel* getPanel() { return mPanel; } +	LLPanel* getPanel() const { return mPanel; }  	// enable/disable Toast's Hide button  	void setHideButtonEnabled(bool enabled);  	// @@ -155,6 +156,8 @@ public:  	void setFadingTime(S32 seconds); +	void closeToast(); +  	/**  	 * Returns padding between floater top and wrapper_panel top.  	 * This padding should be taken into account when positioning or reshaping toasts @@ -167,9 +170,9 @@ public:  	// get information whether the notification corresponding to the toast is valid or not  	bool isNotificationValid();  	// get toast's Notification ID -	const LLUUID getNotificationID() { return mNotificationID;} +	const LLUUID getNotificationID() const { return mNotificationID;}  	// get toast's Session ID -	const LLUUID getSessionID() { return mSessionID;} +	const LLUUID getSessionID() const { return mSessionID;}  	//  	void setCanFade(bool can_fade);  	// @@ -179,19 +182,12 @@ public:  	// set whether this toast considered as hidden or not  	void setIsHidden( bool is_toast_hidden ) { mIsHidden = is_toast_hidden; } -	const LLNotificationPtr& getNotification() { return mNotification;} +	const LLNotificationPtr& getNotification() const { return mNotification;}  	// Registers signals/callbacks for events -	toast_signal_t mOnFadeSignal; -	toast_signal_t mOnDeleteToastSignal; -	toast_signal_t mOnToastDestroyedSignal; -	boost::signals2::connection setOnFadeCallback(toast_callback_t cb) { return mOnFadeSignal.connect(cb); } -	boost::signals2::connection setOnToastDestroyedCallback(toast_callback_t cb) { return mOnToastDestroyedSignal.connect(cb); } - -	typedef boost::function<void (LLToast* toast, bool mouse_enter)> toast_hover_check_callback_t; -	typedef boost::signals2::signal<void (LLToast* toast, bool mouse_enter)> toast_hover_check_signal_t; -	toast_hover_check_signal_t mOnToastHoverSignal;	 -	boost::signals2::connection setOnToastHoverCallback(toast_hover_check_callback_t cb) { return mOnToastHoverSignal.connect(cb); } +	boost::signals2::connection setOnFadeCallback(const toast_signal_t::slot_type& cb) { return mOnFadeSignal.connect(cb); } +	boost::signals2::connection setOnToastDestroyedCallback(const toast_signal_t::slot_type& cb) { return mOnToastDestroyedSignal.connect(cb); } +	boost::signals2::connection setOnToastHoverCallback(const toast_hover_check_signal_t::slot_type& cb) { return mOnToastHoverSignal.connect(cb); }  	boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseEnterSignal.connect(cb); };  	boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseLeaveSignal.connect(cb); }; @@ -237,6 +233,11 @@ private:  	bool		mIsFading;  	bool		mIsHovered; +	toast_signal_t mOnFadeSignal; +	toast_signal_t mOnDeleteToastSignal; +	toast_signal_t mOnToastDestroyedSignal; +	toast_hover_check_signal_t mOnToastHoverSignal; +  	commit_signal_t mToastMouseEnterSignal;  	commit_signal_t mToastMouseLeaveSignal;  }; diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index 0f337825e9..ada7570776 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -69,8 +69,17 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  		mLabel(notification->getName()),  		mLineEditor(NULL)  { +	// EXP-1822 +	// save currently focused view, so that return focus to it +	// on destroying this toast. +	LLView* current_selection = dynamic_cast<LLView*>(gFocusMgr.getKeyboardFocus()); +	if (current_selection) +	{ +		mPreviouslyFocusedView = current_selection->getHandle(); +	} +  	const LLFontGL* font = LLFontGL::getFontSansSerif(); -	const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f); +	const S32 LINE_HEIGHT = font->getLineHeight();  	const S32 EDITOR_HEIGHT = 20;  	LLNotificationFormPtr form = mNotification->getForm(); @@ -365,7 +374,7 @@ bool LLToastAlertPanel::setCheckBox( const std::string& check_title, const std::  	}  	const LLFontGL* font =  mCheck->getFont(); -	const S32 LINE_HEIGHT = llfloor(font->getLineHeight() + 0.99f); +	const S32 LINE_HEIGHT = font->getLineHeight();  	// Extend dialog for "check next time"  	S32 max_msg_width = LLToastPanel::getRect().getWidth() - 2 * HPAD; @@ -408,6 +417,13 @@ LLToastAlertPanel::~LLToastAlertPanel()  {  	LLTransientFloaterMgr::instance().removeControlView(  			LLTransientFloaterMgr::GLOBAL, this); + +	// EXP-1822 +	// return focus to the previously focused view +	if (mPreviouslyFocusedView.get()) +	{ +		gFocusMgr.setKeyboardFocus(mPreviouslyFocusedView.get()); +	}  }  BOOL LLToastAlertPanel::hasTitleBar() const diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h index 7b157f19bb..d1be5e018e 100644 --- a/indra/newview/lltoastalertpanel.h +++ b/indra/newview/lltoastalertpanel.h @@ -113,6 +113,7 @@ private:  	LLFrameTimer	mDefaultBtnTimer;  	// For Dialogs that take a line as text as input:  	LLLineEditor* mLineEditor; +	LLHandle<LLView>	mPreviouslyFocusedView;  }; diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp index fc69157a40..d2a4ce8745 100644 --- a/indra/newview/lltoastpanel.cpp +++ b/indra/newview/lltoastpanel.cpp @@ -68,7 +68,7 @@ void LLToastPanel::snapToMessageHeight(LLTextBase* message, S32 maxLineCount)  	if (message->getVisible())  	{  		S32 heightDelta = 0; -		S32 maxTextHeight = (S32)(message->getDefaultFont()->getLineHeight() * maxLineCount); +		S32 maxTextHeight = message->getDefaultFont()->getLineHeight() * maxLineCount;  		LLRect messageRect = message->getRect();  		S32 oldTextHeight = messageRect.getHeight(); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 8c32dfcb4d..c7ab934f9e 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -333,14 +333,15 @@ LLToolDragAndDrop::LLDragAndDropDictionary::LLDragAndDropDictionary()  };  LLToolDragAndDrop::LLToolDragAndDrop() -:	 LLTool(std::string("draganddrop"), NULL), -	 mDragStartX(0), -	 mDragStartY(0), -	 mSource(SOURCE_AGENT), -	 mCursor(UI_CURSOR_NO), -	 mLastAccept(ACCEPT_NO), -	 mDrop(FALSE), -	 mCurItemIndex(0) +:	LLTool(std::string("draganddrop"), NULL), +	mCargoCount(0), +	mDragStartX(0), +	mDragStartY(0), +	mSource(SOURCE_AGENT), +	mCursor(UI_CURSOR_NO), +	mLastAccept(ACCEPT_NO), +	mDrop(FALSE), +	mCurItemIndex(0)  {  } diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 188d36cd1b..245c2a23e6 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -86,8 +86,11 @@ public:  	EAcceptance getLastAccept() { return mLastAccept; }  	boost::signals2::connection setEndDragCallback( const enddrag_signal_t::slot_type& cb ) { return mEndDragSignal.connect(cb); } -	 -	uuid_vec_t::size_type getCargoIDsCount() const { return mCargoIDs.size(); } + +	void setCargoCount(U32 count) { mCargoCount = count; } +	void resetCargoCount() { mCargoCount = 0; } +	U32 getCargoCount() const { return (mCargoCount > 0) ? mCargoCount : mCargoIDs.size(); } +  	static S32 getOperationId() { return sOperationId; }  protected: @@ -118,6 +121,8 @@ protected:  protected: +	U32				mCargoCount; +  	S32				mDragStartX;  	S32				mDragStartY; diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index c1cc9c7bc4..f3d8de1904 100755 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -162,10 +162,10 @@ void LLBingTranslationHandler::getTranslateURL(  	const std::string &text) const  {  	url = std::string("http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=") -		+ getAPIKey() + "&text=" + LLURI::escape(text) + "&to=" + to_lang; +		+ getAPIKey() + "&text=" + LLURI::escape(text) + "&to=" + getAPILanguageCode(to_lang);  	if (!from_lang.empty())  	{ -		url += "&from=" + from_lang; +		url += "&from=" + getAPILanguageCode(from_lang);  	}  } @@ -236,6 +236,12 @@ std::string LLBingTranslationHandler::getAPIKey()  	return gSavedSettings.getString("BingTranslateAPIKey");  } +// static +std::string LLBingTranslationHandler::getAPILanguageCode(const std::string& lang) +{ +	return lang == "zh" ? "zh-CHT" : lang; // treat Chinese as Traditional Chinese +} +  LLTranslate::TranslationReceiver::TranslationReceiver(const std::string& from_lang, const std::string& to_lang)  :	mFromLang(from_lang)  ,	mToLang(to_lang) diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h index 424bc14587..c58e1adb8c 100755 --- a/indra/newview/lltranslate.h +++ b/indra/newview/lltranslate.h @@ -157,6 +157,7 @@ public:  	/*virtual*/ bool isConfigured() const;  private:  	static std::string getAPIKey(); +	static std::string getAPILanguageCode(const std::string& lang);  };  /** diff --git a/indra/newview/lluploaddialog.cpp b/indra/newview/lluploaddialog.cpp index df7c5be0d6..e59064c074 100644 --- a/indra/newview/lluploaddialog.cpp +++ b/indra/newview/lluploaddialog.cpp @@ -115,7 +115,7 @@ void LLUploadDialog::setMessage( const std::string& msg)  		token = strtok( NULL, "\n" );  	} -	S32 line_height = S32( font->getLineHeight() + 0.99f ); +	S32 line_height = font->getLineHeight();  	S32 dialog_width = max_msg_width + 2 * HPAD;  	S32 dialog_height = line_height * msg_lines.size() + 2 * VPAD; diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 163581ea7f..cf52b5165b 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1462,6 +1462,7 @@ const std::string& LLViewerInventoryItem::getName() const  class LLFavoritesOrderStorage : public LLSingleton<LLFavoritesOrderStorage>  	, public LLDestroyClass<LLFavoritesOrderStorage>  { +	LOG_CLASS(LLFavoritesOrderStorage);  public:  	/**  	 * Sets sort index for specified with LLUUID favorite landmark @@ -1620,10 +1621,18 @@ void LLFavoritesOrderStorage::load()  void LLFavoritesOrderStorage::saveFavoritesSLURLs()  {  	// Do not change the file if we are not logged in yet. -	if (!LLLoginInstance::getInstance()->authSuccess()) return; +	if (!LLLoginInstance::getInstance()->authSuccess()) +	{ +		llwarns << "Cannot save favorites: not logged in" << llendl; +		return; +	}  	std::string user_dir = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, ""); -	if (user_dir.empty()) return; +	if (user_dir.empty()) +	{ +		llwarns << "Cannot save favorites: empty user dir name" << llendl; +		return; +	}  	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");  	llifstream in_file; @@ -1649,13 +1658,19 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()  		slurls_map_t::iterator slurl_iter = mSLURLs.find(value["asset_id"]);  		if (slurl_iter != mSLURLs.end())  		{ +			lldebugs << "Saving favorite: idx=" << (*it)->getSortField() << ", SLURL=" <<  slurl_iter->second << ", value=" << value << llendl;  			value["slurl"] = slurl_iter->second;  			user_llsd[(*it)->getSortField()] = value;  		} +		else +		{ +			llwarns << "Not saving favorite " << value["name"] << ": no matching SLURL" << llendl; +		}  	}  	LLAvatarName av_name;  	LLAvatarNameCache::get( gAgentID, &av_name ); +	lldebugs << "Saved favorites for " << av_name.getLegacyName() << llendl;  	fav_llsd[av_name.getLegacyName()] = user_llsd;  	llofstream file; @@ -1674,6 +1689,7 @@ void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()  	LLAvatarName av_name;  	LLAvatarNameCache::get( gAgentID, &av_name ); +	lldebugs << "Removed favorites for " << av_name.getLegacyName() << llendl;  	if (fav_llsd.has(av_name.getLegacyName()))  	{  		fav_llsd.erase(av_name.getLegacyName()); @@ -1706,6 +1722,7 @@ void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmar  void LLFavoritesOrderStorage::storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl)  { +	lldebugs << "Saving landmark SLURL: " << slurl << llendl;  	mSLURLs[asset_id] = slurl;  } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 046360e9e9..d7e79351c2 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1901,7 +1901,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_  		}  	} -	LL_WARNS_ONCE("Plugin") << "plugin intialization failed for mime type: " << media_type << LL_ENDL; +	LL_WARNS_ONCE("Plugin") << "plugin initialization failed for mime type: " << media_type << LL_ENDL;  	LLSD args;  	args["MIME_TYPE"] = media_type;  	LLNotificationsUtil::add("NoPlugin", args); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 99540ccce9..12aed8f448 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7281,12 +7281,6 @@ class LLToolsUseSelectionForGrid : public view_listener_t  		} func;  		LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func);  		LLSelectMgr::getInstance()->setGridMode(GRID_MODE_REF_OBJECT); - -		LLFloaterBuildOptions* build_options_floater = LLFloaterReg::getTypedInstance<LLFloaterBuildOptions>("build_options"); -		if (build_options_floater && build_options_floater->getVisible()) -		{ -			build_options_floater->setGridMode(GRID_MODE_REF_OBJECT); -		}  		return true;  	}  }; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 7e830e14bf..f31f0364b3 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -527,8 +527,22 @@ class LLFileTakeSnapshotToDisk : public view_listener_t  									   FALSE))  		{  			gViewerWindow->playSnapshotAnimAndSound(); -			 -			LLPointer<LLImageFormatted> formatted = new LLImagePNG; +			LLPointer<LLImageFormatted> formatted; +			LLFloaterSnapshot::ESnapshotFormat fmt = (LLFloaterSnapshot::ESnapshotFormat) gSavedSettings.getS32("SnapshotFormat"); +			switch (fmt) +			{ +			case LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG: +				formatted = new LLImageJPEG(gSavedSettings.getS32("SnapshotQuality")); +				break; +			default: +				llwarns << "Unknown local snapshot format: " << fmt << llendl; +			case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG: +				formatted = new LLImagePNG; +				break; +			case LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP: +				formatted = new LLImageBMP; +				break; +			}  			formatted->enableOverSize() ;  			formatted->encode(raw, 0);  			formatted->disableOverSize() ; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3c6770df43..716f47150e 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -135,6 +135,7 @@ extern BOOL gDebugClicks;  // function prototypes  bool check_offer_throttle(const std::string& from_name, bool check_only); +bool check_asset_previewable(const LLAssetType::EType asset_type);  static void process_money_balance_reply_extended(LLMessageSystem* msg);  //inventory offer throttle globals @@ -1147,7 +1148,18 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)  		}  	}  } -  + +// Return "true" if we have a preview method for that asset type, "false" otherwise +bool check_asset_previewable(const LLAssetType::EType asset_type) +{ +	return	(asset_type == LLAssetType::AT_NOTECARD)  ||  +			(asset_type == LLAssetType::AT_LANDMARK)  || +			(asset_type == LLAssetType::AT_TEXTURE)   || +			(asset_type == LLAssetType::AT_ANIMATION) || +			(asset_type == LLAssetType::AT_SCRIPT)    || +			(asset_type == LLAssetType::AT_SOUND); +} +  void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_name)  {  	for (uuid_vec_t::const_iterator obj_iter = objects.begin(); @@ -1171,7 +1183,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam  		// Either an inventory item or a category.  		const LLInventoryItem* item = dynamic_cast<const LLInventoryItem*>(obj); -		if (item) +		if (item && check_asset_previewable(asset_type))  		{  			////////////////////////////////////////////////////////////////////////////////  			// Special handling for various types. @@ -1246,6 +1258,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam  						LLFloaterReg::showInstance("preview_sound", LLSD(obj_id), take_focus);  						break;  					default: +						LL_DEBUGS("Messaging") << "No preview method for previewable asset type : " << LLAssetType::lookupHumanReadable(asset_type)  << LL_ENDL;  						break;  				}  			} @@ -2360,8 +2373,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;  			bool mute_im = is_muted; -			if(accept_im_from_only_friend&&!is_friend) +			if (accept_im_from_only_friend && !is_friend)  			{ +				if (!gIMMgr->isNonFriendSessionNotified(session_id)) +				{ +					std::string message = LLTrans::getString("IM_unblock_only_groups_friends"); +					gIMMgr->addMessage(session_id, from_id, name, message); +					gIMMgr->addNotifiedNonFriendSessionID(session_id); +				} +  				mute_im = true;  			}  			if (!mute_im || is_linden)  diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index d8acd99953..46bfb2dad0 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -35,6 +35,7 @@  #include "message.h"  #include "stdenums.h"  #include "llnotifications.h" +#include "llextendedstatus.h"  //  // Forward declarations diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index b41ed00f17..99102309a1 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -187,7 +187,7 @@ public:  		else  		{  			width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str()); -			height = llmax(mImage->getHeight(), llceil(mStyle->getFont()->getLineHeight())); +			height = llmax(mImage->getHeight(), mStyle->getFont()->getLineHeight());  		}  		return false;  	} diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 8a713ae22c..d0d9538ca3 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -614,7 +614,7 @@ public:  				addText(xpos, ypos, llformat("%d/%d Mesh HTTP Requests/Retries", LLMeshRepository::sHTTPRequestCount,  					LLMeshRepository::sHTTPRetryCount));  				ypos += y_inc; - +				  				addText(xpos, ypos, llformat("%d/%d Mesh LOD Pending/Processing", LLMeshRepository::sLODPending, LLMeshRepository::sLODProcessing));  				ypos += y_inc; @@ -1973,12 +1973,12 @@ void LLViewerWindow::shutdownViews()  		gMorphView->setVisible(FALSE);  	}  	llinfos << "Global views cleaned." << llendl ; -	 +  	// DEV-40930: Clear sModalStack. Otherwise, any LLModalDialog left open  	// will crump with LL_ERRS.  	LLModalDialog::shutdownModals();  	llinfos << "LLModalDialog shut down." << llendl;  - +	  	// destroy the nav bar, not currently part of gViewerWindow  	// *TODO: Make LLNavigationBar part of gViewerWindow  	if (LLNavigationBar::instanceExists()) @@ -1986,17 +1986,17 @@ void LLViewerWindow::shutdownViews()  		delete LLNavigationBar::getInstance();  	}  	llinfos << "LLNavigationBar destroyed." << llendl ; -	 +  	// destroy menus after instantiating navbar above, as it needs  	// access to gMenuHolder  	cleanup_menus();  	llinfos << "menus destroyed." << llendl ; -	 +  	// Delete all child views.  	delete mRootView;  	mRootView = NULL;  	llinfos << "RootView deleted." << llendl ; -	 +  	// Automatically deleted as children of mRootView.  Fix the globals.  	gStatusBar = NULL;  	gIMMgr = NULL; @@ -3181,12 +3181,6 @@ void LLViewerWindow::updateLayout()  		//gMenuBarView->setItemVisible("BuildTools", gFloaterTools->getVisible());  	} -	LLFloaterBuildOptions* build_options_floater = LLFloaterReg::findTypedInstance<LLFloaterBuildOptions>("build_options"); -	if (build_options_floater && build_options_floater->getVisible()) -	{ -		build_options_floater->updateGridMode(); -	} -  	// Always update console  	if(gConsole)  	{ diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index f1df67494f..8be9516ab6 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -365,9 +365,9 @@ BOOL LLVOAvatarSelf::buildMenus()  						item_params.label = sub_piemenu_name;  					}  					item_params.name =(item_params.label ); -					item_params.on_click.function_name = "Attachment.Detach"; +					item_params.on_click.function_name = "Attachment.DetachFromPoint";  					item_params.on_click.parameter = iter->first; -					item_params.on_enable.function_name = "Attachment.EnableDetach"; +					item_params.on_enable.function_name = "Attachment.PointFilled";  					item_params.on_enable.parameter = iter->first;  					LLMenuItemCallGL* item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params); diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index e50851b8e7..a20ee8686b 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -513,7 +513,7 @@ void LLWorldMapView::draw()  					 TRUE,  					 "You are here",  					 "", -					 llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking +					 LLFontGL::getFontSansSerifSmall()->getLineHeight()); // offset vertically by one line, to avoid overlap with target tracking  	}  	// Draw the current agent viewing angle @@ -992,7 +992,7 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&  	const S32 TEXT_PADDING = DEFAULT_TRACKING_ARROW_SIZE + 2;  	S32 half_text_width = llfloor(font->getWidthF32(label) * 0.5f);  	text_x = llclamp(text_x, half_text_width + TEXT_PADDING, getRect().getWidth() - half_text_width - TEXT_PADDING); -	text_y = llclamp(text_y + vert_offset, TEXT_PADDING + vert_offset, getRect().getHeight() - llround(font->getLineHeight()) - TEXT_PADDING - vert_offset); +	text_y = llclamp(text_y + vert_offset, TEXT_PADDING + vert_offset, getRect().getHeight() - font->getLineHeight() - TEXT_PADDING - vert_offset);  	if (label != "")  	{ @@ -1005,7 +1005,7 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&  		if (tooltip != "")  		{ -			text_y -= (S32)font->getLineHeight(); +			text_y -= font->getLineHeight();  			font->renderUTF8(  				tooltip, 0, @@ -1203,7 +1203,7 @@ void LLWorldMapView::drawIconName(F32 x_pixels,  		LLFontGL::NORMAL,   		LLFontGL::DROP_SHADOW); -	text_y -= llround(LLFontGL::getFontSansSerif()->getLineHeight()); +	text_y -= LLFontGL::getFontSansSerif()->getLineHeight();  	// render text  	LLFontGL::getFontSansSerif()->renderUTF8(second_line, 0, diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index 930bbaa8cb..d11373ce1d 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -1,6 +1,5 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater - legacy_header_height="18"   can_minimize="false"   can_tear_off="false"   can_resize="true" @@ -16,67 +15,98 @@   save_dock_state="true"   save_visibility="true"   single_instance="true"  - width="320"> -  <string name="nudge_parabuild" translate="false">Nudge 1</string> -  <string name="test_the_vlt">This string CHANGE2 is extracted.</string> -  <string name="testing_eli">Just a test. changes.</string> -  <text_editor -   parse_urls="true" -   bg_readonly_color="ChatHistoryBgColor" -   bg_writeable_color="ChatHistoryBgColor"  -   border_visible="false" -   follows="all" -   font="SansSerif"  -	 left="1" -   top="20" -   layout="topleft" -	 height="260" -   name="chat_history" -   max_length="200000"  -   parse_highlights="true" -   text_color="ChatHistoryTextColor" -   text_readonly_color="ChatHistoryTextColor" -   translate="false" -   track_end="true"  -   wrap="true"  -   width="320"> -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    Really long line that is long enough to wrap once with jyg descenders. -    </text_editor> + width="650"> +  <text left="0" +        follows="left|top|bottom" +        top="5" +        clip_partial="true"         +        bottom="-5" +        width="100" +        valign="top"> +this +is +some +text +that +is +top +aligned</text> +  <text left_pad="5" +        follows="left|top|bottom" +        top="5" +        bottom="-5" +        clip_partial="true" +        width="100" +        valign="center"> +this +is +some +text +that +is +center +aligned</text> +  <text left_pad="5" +        follows="left|top|bottom" +        top="5" +        clip_partial="true"         +        bottom="-5" +        width="100" +        valign="bottom"> +this +is +some +text +that +is +bottom +aligned</text> +  <text_editor left_pad="5" +        follows="left|top|bottom" +        top="5" +        clip_partial="true" +        bottom="-5" +        width="100" +        valign="top"> +this +is +some +text +that +is +top +aligned +  </text_editor> +  <text_editor left_pad="5" +        follows="left|top|bottom" +        top="5" +        bottom="-5" +        clip_partial="true" +        width="100" +        valign="center"> +this +is +some +text +that +is +center +aligned +  </text_editor> +  <text_editor left_pad="5" +        follows="left|top|bottom" +        top="5" +        clip_partial="true" +        bottom="-5" +        width="100" +        valign="bottom"> +this +is +some +text +that +is +bottom +aligned +  </text_editor>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 1d5a6740b7..2781717f0b 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -192,12 +192,12 @@               type="string"               length="1"               follows="left|top" -             height="20" +             height="18"               layout="topleft"               left_pad="2"               valign="center"                name="ContentRatingText" -             top_delta="0" +             top_delta="-2"               width="250">                  Adult              </text> @@ -209,7 +209,7 @@               layout="topleft"               left="10"               name="Owner:" -             top_pad="1" +             top_pad="3"               width="100">                  Owner:              </text> @@ -736,7 +736,7 @@               height="16"               layout="topleft"               left_pad="10" -             top_delta="-3"  +             top_delta="-1"                mouse_opaque="false"               name="region_maturity_text"               valign="center"  @@ -1951,7 +1951,7 @@ Only large parcels can be listed in search.  			 name="access_estate_defined">  				(Defined by the Estate)  			</panel.string> -            <panel.string +      <panel.string               name="estate_override">                  One or more of these options is set at the estate level              </panel.string> diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml index 35918e9705..38428b36fc 100644 --- a/indra/newview/skins/default/xui/en/floater_build_options.xml +++ b/indra/newview/skins/default/xui/en/floater_build_options.xml @@ -1,70 +1,13 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   legacy_header_height="18" - height="198" + height="170"   layout="topleft"   name="build options floater"   help_topic="build_options_floater"   save_rect="true"   title="GRID OPTIONS"   width="264"> - 	<floater.string -     name="grid_screen_text"> -        Screen -    </floater.string> -    <floater.string -     name="grid_local_text"> -        Local -    </floater.string> -    <floater.string -     name="grid_world_text"> -        World -    </floater.string> -    <floater.string -     name="grid_reference_text"> -        Reference -    </floater.string> -    <floater.string -     name="grid_attachment_text"> -        Attachment -    </floater.string> -    <text -     type="string" -     length="1" -     follows="left|top" -     height="16" -     layout="topleft" -     left="10" -     tool_tip="Grid opacity" -     name="grid_mode_label" -     top_pad="30" -     width="123"> -        Mode -    </text> -    <combo_box -     height="23" -     layout="topleft" -     left_pad="9" -     follows="left|top" -     name="combobox grid mode" -     tool_tip="Choose the type of grid ruler for positioning the object" -     top_delta="-3" -     width="108"> -      <combo_box.item -       label="World grid" -       name="World" -       value="World" /> -      <combo_box.item -       label="Local grid" -       name="Local" -       value="Local" /> -      <combo_box.item -       label="Reference grid" -       name="Reference" -       value="Reference" /> -       <combo_box.commit_callback -      function="GridOptions.gridMode"/> -    </combo_box>      <spinner       control_name="GridResolution"       follows="left|top" @@ -77,7 +20,7 @@       max_val="5"       min_val="0.01"       name="GridResolution" -     top_pad="4" +     top_pad="30"       width="200" />      <spinner       control_name="GridDrawSize" diff --git a/indra/newview/skins/default/xui/en/floater_fast_timers.xml b/indra/newview/skins/default/xui/en/floater_fast_timers.xml index 49aa8f3840..77adb5524e 100644 --- a/indra/newview/skins/default/xui/en/floater_fast_timers.xml +++ b/indra/newview/skins/default/xui/en/floater_fast_timers.xml @@ -22,7 +22,6 @@            top="5"            width="180"            height="40" -          pad_bottom="-5"            label="Pause"            font="SansSerifHuge"/>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml index 498a9b6ce0..b01e5852dc 100644 --- a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml +++ b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml @@ -99,7 +99,7 @@              halign="center"              font="SansSerifMedium"              font_shadow="hard" -            valign="bottom"> +            valign="top">            Drag items here to create folders          </text>        </panel> @@ -114,8 +114,8 @@            height="20"            wrap="true"            halign="left" -          valign="bottom" -          font="SansSerif" /> +          valign="center" +          font="SansSerif"/>        <button            label="Send to Marketplace"            tool_tip="Push to my Marketplace Storefront" diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index eebc5ddc72..0e211551e6 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -117,18 +117,18 @@               name="lod_tab_border"               top_pad="0"               width="619" /> -            <text -             follows="left|top" -             height="18" -             initial_value="Source" -             layout="topleft" -             left="75" -             name="source" -             text_color="ModelUploaderLabels" -             top="15" -             valign="center" -             value="Source" -             width="335" /> +          <text +           follows="left|top" +           height="18" +           initial_value="Source" +           layout="topleft" +           left="75" +           name="source" +           text_color="ModelUploaderLabels" +           top="15" +           valign="center" +           value="Source" +           width="335"/>              <text               follows="left|top"               halign="right" @@ -163,7 +163,7 @@               name="high_label"               text_color="ModelUploaderLabels"               top_pad="10" -             valign="center" +             valign="top"               value="High"               width="65" />              <combo_box @@ -240,34 +240,34 @@              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="high_triangles" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="high_vertices" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="center" -             height="18" +             height="15"               initial_value=""               layout="topleft"               left_pad="0"               name="high_status" -             valign="center" +             valign="top"               value=""               width="65" />              <icon @@ -277,7 +277,7 @@               left_delta="20"               mouse_opaque="true"               name="status_icon_high" -             top_delta="0" +             top_delta="-2"               width="16" />              <text               follows="left|top" @@ -288,7 +288,7 @@               name="medium_label"               text_color="ModelUploaderLabels"               top_pad="15" -             valign="center" +             valign="top"               value="Medium"               width="65" />              <combo_box @@ -368,34 +368,34 @@              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="medium_triangles" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="medium_vertices" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="center" -             height="18" +             height="15"               initial_value=""               layout="topleft"               left_pad="0"               name="medium_status" -             valign="center" +             valign="top"               value=""               width="65" />              <icon @@ -405,7 +405,7 @@               left_delta="20"               mouse_opaque="true"               name="status_icon_medium" -             top_delta="0" +             top_delta="-2"               width="16" />              <text               follows="left|top" @@ -416,7 +416,7 @@               name="low_label"               text_color="ModelUploaderLabels"               top_pad="15" -             valign="center" +             valign="top"               value="Low"               width="65" />              <combo_box @@ -496,34 +496,34 @@              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="low_triangles" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="low_vertices" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="center" -             height="18" +             height="15"               initial_value=""               layout="topleft"               left_pad="0"               name="low_status" -             valign="center" +             valign="top"               value=""               width="65" />              <icon @@ -533,7 +533,7 @@               left_delta="20"               mouse_opaque="true"               name="status_icon_low" -             top_delta="0" +             top_delta="-2"               width="16" />              <text               follows="left|top" @@ -544,7 +544,7 @@               name="lowest_label"               text_color="ModelUploaderLabels"               top_pad="15" -             valign="center" +             valign="top"               value="Lowest"               width="65" />              <combo_box @@ -624,34 +624,34 @@              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="lowest_triangles" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="right" -             height="18" +             height="15"               initial_value="0"               layout="topleft"               left_pad="0"               name="lowest_vertices" -             valign="center" +             valign="top"               value="0"               width="65" />              <text               follows="left|top"               halign="center" -             height="18" +             height="15"               initial_value=""               layout="topleft"               left_pad="0"               name="lowest_status" -             valign="center" +             valign="top"               value=""               width="65" />              <icon diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index 402868bb97..b2662331b0 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -100,7 +100,7 @@           help_topic="preferences_colors_tab"           name="colors" />          <panel -		 class="panel_preference" +         class="panel_preference_privacy"           filename="panel_preferences_privacy.xml"           label="Privacy"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml index f95f21e63a..a04050e7eb 100644 --- a/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml +++ b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml @@ -32,6 +32,26 @@                    bg_alpha_color="blue"                    height="11"                    min_height="0" +                  visible="false" +                  background_visible="true"> +      <text follows="top|left|right" halign="center" text_color="white">flex</text> +    </layout_panel> +    <layout_panel name="flex" +                  auto_resize="true" +                  user_resize="true" +                  bg_alpha_color="blue" +                  height="11" +                  min_height="0" +                  visible="true" +                  background_visible="true"> +      <text follows="top|left|right" halign="center" text_color="white">flex</text> +    </layout_panel> +    <layout_panel name="flex" +                  auto_resize="true" +                  user_resize="true" +                  bg_alpha_color="blue" +                  height="11" +                  min_height="0"                    background_visible="true">        <text follows="top|left|right" halign="center" text_color="white">flex</text>      </layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/en/floater_test_text_vertical_aligment.xml new file mode 100644 index 0000000000..d11373ce1d --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_test_text_vertical_aligment.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + can_minimize="false" + can_tear_off="false" + can_resize="true" + can_drag_on_left="false" + can_close="true" + can_dock="true" + bevel_style="in" + height="300" + layout="topleft" + name="Test Floater" + save_rect="true" + title="TEST FLOATER" + save_dock_state="true" + save_visibility="true" + single_instance="true"  + width="650"> +  <text left="0" +        follows="left|top|bottom" +        top="5" +        clip_partial="true"         +        bottom="-5" +        width="100" +        valign="top"> +this +is +some +text +that +is +top +aligned</text> +  <text left_pad="5" +        follows="left|top|bottom" +        top="5" +        bottom="-5" +        clip_partial="true" +        width="100" +        valign="center"> +this +is +some +text +that +is +center +aligned</text> +  <text left_pad="5" +        follows="left|top|bottom" +        top="5" +        clip_partial="true"         +        bottom="-5" +        width="100" +        valign="bottom"> +this +is +some +text +that +is +bottom +aligned</text> +  <text_editor left_pad="5" +        follows="left|top|bottom" +        top="5" +        clip_partial="true" +        bottom="-5" +        width="100" +        valign="top"> +this +is +some +text +that +is +top +aligned +  </text_editor> +  <text_editor left_pad="5" +        follows="left|top|bottom" +        top="5" +        bottom="-5" +        clip_partial="true" +        width="100" +        valign="center"> +this +is +some +text +that +is +center +aligned +  </text_editor> +  <text_editor left_pad="5" +        follows="left|top|bottom" +        top="5" +        clip_partial="true" +        bottom="-5" +        width="100" +        valign="bottom"> +this +is +some +text +that +is +bottom +aligned +  </text_editor> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml index 2df9bb35fe..1d31fbd6dc 100644 --- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml @@ -8,21 +8,7 @@   help_topic="floater_test_textbox"   translate="false"   width="800"> -    <text -     type="string" -     length="1" -     height="90" -     layout="topleft" -     left="10" -     top_pad="30" -     width="300"> -        First line of multiple lines -Second line of multiple lines -Third line of multiple lines -Fourth line of multiple lines -Fifth line of multiple lines -    </text> -  <text + <text      clip_partial="true"      top_pad="10"      left="10" diff --git a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml index 067c1fed82..0c41c3ba2f 100644 --- a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml +++ b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml @@ -7,7 +7,7 @@   name="floater_test_toolbar"   translate="false"   width="500"> -  <toolbar name="test_toolbar_top" +  <!--<toolbar name="test_toolbar_top"             button_display_mode="icons_with_text"             follows="left|right|top"             height="50" @@ -20,7 +20,7 @@      <command name="avatar"/>      <command name="build"/>      <command name="chat"/> -  </toolbar> +  </toolbar>-->    <toolbar name="test_toolbar_left"             button_display_mode="icons_with_text"             follows="left|bottom|top" @@ -46,7 +46,7 @@      <command name="build"/>      <command name="chat"/>    </toolbar> -  <toolbar name="test_toolbar_bottom" +  <!--<toolbar name="test_toolbar_bottom"             button_display_mode="icons_with_text"             follows="left|right|bottom"             height="50" @@ -58,5 +58,5 @@      <command name="avatar"/>      <command name="build"/>      <command name="chat"/> -  </toolbar> +  </toolbar>-->  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index f9147ea650..2d63c94fe1 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -14,7 +14,27 @@   save_visibility="true"   sound_flags="0"   width="295"> -    <floater.string +  <floater.string +     name="grid_screen_text"> +    Screen +  </floater.string> +  <floater.string +   name="grid_local_text"> +    Local +  </floater.string> +  <floater.string +   name="grid_world_text"> +    World +  </floater.string> +  <floater.string +   name="grid_reference_text"> +    Reference +  </floater.string> +  <floater.string +   name="grid_attachment_text"> +    Attachment +  </floater.string> +  <floater.string       name="status_rotate">          Drag colored bands to rotate object      </floater.string> @@ -312,20 +332,48 @@       top_pad="0"       name="checkbox snap to grid"       width="134" /> -    <button -     left_pad="0" -     label="Options..." +    <combo_box +      height="20" +      layout="topleft" +      follows="left|top" +      name="combobox grid mode" +      tool_tip="Choose the type of grid ruler for positioning the object" +      top="83" +      left="195" +      top_pad="0" +      width="60"> +      <combo_box.item +      label="World" +      name="World" +      value="World" /> +      <combo_box.item +      label="Local" +      name="Local" +      value="Local" /> +      <combo_box.item +      label="Reference" +      name="Reference" +      value="Reference" /> +      <combo_box.commit_callback +      function="BuildTool.gridMode"/> +    </combo_box>   +   +  <button +     left="259" +     label="" +     image_selected="ForwardArrow_Press" +     image_unselected="ForwardArrow_Off"       layout="topleft"       follows="top|left"       name="Options..."       tool_tip="See more grid options"       top="83" -     right="-35" -     width="65" -     height="21" > +     width="25" +     height="20" >  	 <button.commit_callback  	     function="BuildTool.gridOptions"/>  	</button> +       <button       follows="left|top"       height="20" diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml index 72e6187a14..fcaae9d172 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -18,7 +18,7 @@    <text      follows="left|top"      font="SansSerifMedium" -    valign="bottom" +    valign="top"      halign="left"      height="20"      layout="topleft" @@ -33,7 +33,7 @@    <text      follows="left|top"      font="SansSerifMedium" -    valign="bottom" +    valign="top"      halign="left"      height="20"      layout="topleft" diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index 8d14c974b4..b122e1bcff 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -90,6 +90,7 @@ L$30,000     follows="all"     font="SansSerifSmall"     height="13" +   clip="false"     name="object_media_url"     width="207"     left_pad="2" diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index 2645d472f9..5c5c718bdf 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -23,7 +23,7 @@      <text        parse_urls="false"        allow_scroll="false" -      v_pad = "7" +      v_pad = "6"        read_only = "true"        follows="left|right"        font.style="BOLD" @@ -37,7 +37,7 @@        top="0"        translate="false"        use_ellipses="true" -      valign="bottom"  +      valign="top"         value="TestString PleaseIgnore" />    <text      allow_scroll="false" @@ -49,7 +49,7 @@      left_pad="5"      name="time_box"      right="-5" -    top="8" +    top="7"      value="23:30"      width="110" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml index 6af1105400..1b97de2b05 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_item.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_item.xml @@ -16,13 +16,13 @@          top="3"          width="18" />  	<text_chat -      top="5" +      top="3"        left="30"        height="120"        text_color="white"        word_wrap="true"        mouse_opaque="true" -      valign="bottom" +      valign="top"        name="msg_text">  	</text_chat>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index d6d8b2a83e..1c882bb099 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -80,7 +80,6 @@       top="16"       width="288" />      <recent_inventory_panel -     accepts_drag_and_drop="false"       bg_opaque_color="DkGray2"       bg_alpha_color="DkGray2"       background_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 4bf420b79f..53a09ce041 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -70,7 +70,7 @@             layout="topleft"             auto_resize="true"             user_resize="true" -           min_width="480" +           min_width="310"             name="navigation_layout_panel"             width="480">  	        <panel @@ -148,15 +148,15 @@  	         layout="topleft"             auto_resize="true"             user_resize="true" -           min_width="315" +           min_width="185"             name="favorites_layout_panel" -           width="315"> +           width="320">             <icon               follows="top|left"               height="25"               image_name="ChatBarHandle"               layout="topleft" -             left="-318" +             left="-323"               name="resize_handle"               top="4"               width="5" /> @@ -171,16 +171,17 @@               name="favorite"               image_drag_indication="Accordion_ArrowOpened_Off"               tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" -             width="311"> +             width="320">              <label               follows="left|top" -             height="15" +             height="13"               layout="topleft"               left="10"               name="favorites_bar_label"               text_color="LtGray"               tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" -             top="12" +             top="13" +	     valign="bottom"               width="102">                Favorites Bar              </label> diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml index d492f9bd68..d683116eb8 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml @@ -1,35 +1,63 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel - height="300"   follows="all" + height="300" + help_topic="nearby_chat"   layout="topleft"   name="nearby_chat" - help_topic="nearby_chat"   width="320"> -            <check_box -             bottom_delta="36" -             control_name="TranslateChat" -             enabled="true" -             height="16" -             label="Translate chat" -             layout="topleft" -             left="5" -             name="translate_chat_checkbox" -             width="230" /> -  <chat_history -    parse_urls="true" -    bg_readonly_color="ChatHistoryBgColor" -    bg_writeable_color="ChatHistoryBgColor" -    follows="all" -    left="5" -    top_delta="17" -    layout="topleft" -    height="260" -    name="chat_history" -    parse_highlights="true" -    text_color="ChatHistoryTextColor" -    text_readonly_color="ChatHistoryTextColor" -    right_widget_pad="5" -    left_widget_pad="0" -    width="315" /> +  <layout_stack +   follows="all" +   height="295" +   layout="topleft" +   left="0" +   name="stack" +   top="5" +   orientation="vertical" +   width="320"> +    <layout_panel +     auto_resize="false" +     height="26" +     layout="topleft" +     left_delta="0" +     name="translate_chat_checkbox_lp" +     top_delta="0" +     visible="true" +     width="313"> +      <check_box +       top="10" +       control_name="TranslateChat" +       enabled="true" +       height="16" +       label="Translate chat" +       layout="topleft" +       left="5" +       name="translate_chat_checkbox" +       width="300" /> +    </layout_panel> +    <layout_panel +     auto_resize="true" +     height="277" +     left_delta="0" +     layout="topleft" +     name="chat_history_lp" +     width="318"> +      <chat_history +       bg_readonly_color="ChatHistoryBgColor" +       bg_writeable_color="ChatHistoryBgColor" +       follows="all" +       layout="topleft" +       left="5" +       left_widget_pad="0" +       height="272" +       name="chat_history" +       parse_highlights="true" +       parse_urls="true" +       right_widget_pad="5" +       text_color="ChatHistoryTextColor" +       text_readonly_color="ChatHistoryTextColor" +       top="0" +       width="313" /> +    </layout_panel> +  </layout_stack>  </panel> 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 9827180aa7..24882988b0 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -331,7 +331,7 @@     </text>     <radio_group       control_name="LetterKeysFocusChatBar"  -     height="20" +     height="34"       layout="topleft"       left="35"       top_pad="0"  @@ -339,7 +339,7 @@          <radio_item           label="Starts local chat"           name="radio_start_chat" -         top_delta="20"  +         top="0"            layout="topleft"           height="16"            left="0"  @@ -364,7 +364,7 @@       layout="topleft"       left="30"       name="title_afk_text" -     top_pad="15"  +     top_pad="5"        width="190">      	Away timeout:      </text> 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 1f92244eb9..b71586aab1 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -63,7 +63,7 @@        layout="topleft"        left_pad="0"        name="mute_chb_label" -      top_delta="0" +      top_delta="-1"        width="150"        wrap="true">        Mute when minimized diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index d453a970e7..22c1139cdb 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -67,7 +67,6 @@       label_shadow="true"       name="buyL"       pad_right="0" -     pad_bottom="2"       tool_tip="Click to buy more L$"       top="0"       width="80" /> @@ -87,7 +86,6 @@       left_pad="0"       label_shadow="true"       name="goShop" -     pad_bottom="2"       tool_tip="Open Second Life Marketplace"       top="0"       width="65" /> diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index fcba937bdb..29e27cb146 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -48,7 +48,7 @@                        height="300"                        width="330" />               </layout_panel> -			 <layout_panel +			    <layout_panel                   width="330"                   layout="topleft"                   auto_resize="true" @@ -73,6 +73,7 @@                       <string name="InboxLabelWithArg">Received items ([NUM])</string>                       <string name="InboxLabelNoArg">Received items</string>                       <button +                        control_name="InventoryInboxToggleState"                          label="Received items"  						font="SansSerifMedium"                          name="inbox_btn" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3351ffe00f..54d5559efc 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3238,6 +3238,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].  	<string name="IM_to_label">To</string>  	<string name="IM_moderator_label">(Moderator)</string>  	<string name="Saved_message">(Saved [LONG_TIMESTAMP])</string> +	<string name="IM_unblock_only_groups_friends">To see this message, you must uncheck 'Only friends and groups can call or IM me' in Preferences/Privacy.</string>  	<!-- voice calls -->  	<string name="answered_call">Your call has been answered</string> diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml index e2baba92a3..2b2c3faf91 100644 --- a/indra/newview/skins/default/xui/en/widgets/button.xml +++ b/indra/newview/skins/default/xui/en/widgets/button.xml @@ -21,7 +21,7 @@          font="SansSerifSmall"          hover_glow_amount="0.15"          halign="center" -        pad_bottom="3"  +        pad_bottom="1"          height="23"          scale_image="true"          handle_right_mouse="true" diff --git a/indra/newview/skins/default/xui/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml index cca64fad2a..8947024e45 100644 --- a/indra/newview/skins/default/xui/en/widgets/check_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/check_box.xml @@ -10,7 +10,7 @@                          text_readonly_color="LabelDisabledColor"/>    <check_box.check_button name="CheckboxCtrl Button"                            left="2" -                          bottom="2" +                          bottom="1"                            width="13"                            height="13"                             commit_on_return="false" diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index 3e2202b20f..0586119681 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -11,7 +11,7 @@ label_pad_left - padding to the left of tab button labels                 halign="center"                 font="SansSerifSmall"                  tab_height="21" -               label_pad_bottom="2" +               label_pad_bottom="1"                 label_pad_left="4">    <!--    Possible additional attributes for tabs: diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp index 4c0959d1a9..e7ef017760 100644 --- a/indra/newview/tests/llworldmipmap_test.cpp +++ b/indra/newview/tests/llworldmipmap_test.cpp @@ -100,9 +100,9 @@ namespace tut  	{  		S32 level = mMap->scaleToLevel(0.0);  		ensure("scaleToLevel() test 1 failed", level == LLWorldMipmap::MAP_LEVELS); -		level = mMap->scaleToLevel(LLWorldMipmap::MAP_TILE_SIZE); +		level = mMap->scaleToLevel((F32)LLWorldMipmap::MAP_TILE_SIZE);  		ensure("scaleToLevel() test 2 failed", level == 1); -		level = mMap->scaleToLevel(10 * LLWorldMipmap::MAP_TILE_SIZE); +		level = mMap->scaleToLevel(10.f * LLWorldMipmap::MAP_TILE_SIZE);  		ensure("scaleToLevel() test 3 failed", level == 1);  	}  	// Test 2 : globalToMipmap() diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 0931c4ec9b..9bf755c8f8 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1047,9 +1047,13 @@ class Linux_i686Manifest(LinuxManifest):              self.path("libuuid.so.16")              self.path("libuuid.so.16.0.22")              self.path("libSDL-1.2.so.0.11.3") +            self.path("libSDL-1.2.so.0")              self.path("libdirectfb-1.4.so.5.0.4") +            self.path("libdirectfb-1.4.so.5")              self.path("libfusion-1.4.so.5.0.4") +            self.path("libfusion-1.4.so.5")              self.path("libdirect-1.4.so.5.0.4") +            self.path("libdirect-1.4.so.5")              self.path("libopenjpeg.so.1.4.0")              self.path("libopenjpeg.so.1")              self.path("libopenjpeg.so") diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index 1888f191e2..2e18218667 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -447,7 +447,7 @@ void LLUpdaterServiceImpl::restartTimer(unsigned int seconds)  	LL_INFOS("UpdaterService") << "will check for update again in " <<   	seconds << " seconds" << LL_ENDL;   	mTimer.start(); -	mTimer.setTimerExpirySec(seconds); +	mTimer.setTimerExpirySec((F32)seconds);  	LLEventPumps::instance().obtain("mainloop").listen(  		sListenerName, boost::bind(&LLUpdaterServiceImpl::onMainLoop, this, _1));  } | 
