Merge Firestorm LGPL

Wed, 29 Nov 2017 23:04:58 +0100

author
Ansariel
date
Wed, 29 Nov 2017 23:04:58 +0100
changeset 53503
1dc40f73ca64
parent 53502
36e2a08a2f9e
parent 53421
35eab2a03150
child 53504
24e0bab1a823

Merge Firestorm LGPL

indra/llimage/llimage.cpp file | annotate | diff | revisions
indra/llrender/llvertexbuffer.cpp file | annotate | diff | revisions
indra/newview/llappviewer.cpp file | annotate | diff | revisions
indra/newview/llfloatermodelpreview.cpp file | annotate | diff | revisions
indra/newview/llfloaterpreference.cpp file | annotate | diff | revisions
indra/newview/llinventorybridge.cpp file | annotate | diff | revisions
indra/newview/llinventoryfunctions.cpp file | annotate | diff | revisions
indra/newview/llpanelmaininventory.cpp file | annotate | diff | revisions
indra/newview/llstartup.cpp file | annotate | diff | revisions
indra/newview/llviewerregion.cpp file | annotate | diff | revisions
indra/newview/llviewerwindow.cpp file | annotate | diff | revisions
     1.1 --- a/indra/llaudio/llaudioengine.h	Wed Nov 29 23:04:31 2017 +0100
     1.2 +++ b/indra/llaudio/llaudioengine.h	Wed Nov 29 23:04:58 2017 +0100
     1.3 @@ -48,7 +48,10 @@
     1.4  const F32 DEFAULT_MIN_DISTANCE = 2.0f;
     1.5  
     1.6  #define MAX_CHANNELS 30
     1.7 -#define MAX_BUFFERS 40	// Some extra for preloading, maybe?
     1.8 +// <FS:Ansariel> FIRE-4276: Increase number of audio buffers
     1.9 +//#define MAX_BUFFERS 40	// Some extra for preloading, maybe?
    1.10 +#define MAX_BUFFERS 60
    1.11 +// </FS:Ansariel>
    1.12  
    1.13  // This define is intended to allow us to switch from os based wav
    1.14  // file loading to vfs based wav file loading. The problem is that I
     2.1 --- a/indra/llcommon/llsdserialize.cpp	Wed Nov 29 23:04:31 2017 +0100
     2.2 +++ b/indra/llcommon/llsdserialize.cpp	Wed Nov 29 23:04:58 2017 +0100
     2.3 @@ -2150,7 +2150,11 @@
     2.4  		
     2.5  	const U32 CHUNK = 65536;
     2.6  
     2.7 -	U8 *in = new U8[size];
     2.8 +	U8 *in = new(std::nothrow) U8[size];
     2.9 +	if (!in)
    2.10 +	{
    2.11 +		return false;
    2.12 +	}
    2.13  	is.read((char*) in, size); 
    2.14  
    2.15  	U8 out[CHUNK];
    2.16 @@ -2200,7 +2204,6 @@
    2.17  		U8* new_result = (U8*)realloc(result, cur_size + have);
    2.18  		if (new_result == NULL)
    2.19  		{
    2.20 -			LL_WARNS() << "Failed to unzip LLSD block: can't reallocate memory, current size: " << cur_size << " bytes; requested " << cur_size + have << " bytes." << LL_ENDL;
    2.21  			inflateEnd(&strm);
    2.22  			if (result)
    2.23  			{
     3.1 --- a/indra/llcommon/tea.cpp	Wed Nov 29 23:04:31 2017 +0100
     3.2 +++ b/indra/llcommon/tea.cpp	Wed Nov 29 23:04:58 2017 +0100
     3.3 @@ -34,7 +34,9 @@
     3.4  #include <boost/algorithm/string.hpp>
     3.5  
     3.6  
     3.7 -std::string Tea::sCurrency="L$";
     3.8 +std::string Tea::sGridCurrency="L$";
     3.9 +std::string Tea::sRegionCurrency="";
    3.10 +std::string Tea::sActiveCurrency="L$";
    3.11  
    3.12  Tea::Tea()
    3.13  {
    3.14 @@ -45,12 +47,36 @@
    3.15  {
    3.16  }
    3.17  
    3.18 +void Tea::setCurrency(const std::string& currency)
    3.19 +{
    3.20 +	sGridCurrency = currency;
    3.21 +	updateActiveCurrencySymbol();
    3.22 +}
    3.23 +
    3.24 +void Tea::setRegionCurrency(const std::string& currency)
    3.25 +{
    3.26 +	sRegionCurrency = currency;
    3.27 +	updateActiveCurrencySymbol();
    3.28 +}
    3.29 +
    3.30 +void Tea::updateActiveCurrencySymbol()
    3.31 +{
    3.32 +	if(!sRegionCurrency.empty())
    3.33 +	{
    3.34 +		sActiveCurrency = sRegionCurrency;
    3.35 +	}
    3.36 +	else
    3.37 +	{
    3.38 +		sActiveCurrency = sGridCurrency;
    3.39 +	}
    3.40 +}
    3.41 +
    3.42  std::string Tea::wrapCurrency(const std::string& to_substitute)
    3.43  {
    3.44 -	return boost::algorithm::replace_all_copy(to_substitute, "L$",  sCurrency);
    3.45 +	return boost::algorithm::replace_all_copy(to_substitute, "L$",  sActiveCurrency);
    3.46  }
    3.47  
    3.48  void Tea::wrapCurrency(std::string& to_substitute)
    3.49  {
    3.50 -	boost::algorithm::replace_all(to_substitute, "L$",  sCurrency);
    3.51 +	boost::algorithm::replace_all(to_substitute, "L$",  sActiveCurrency);
    3.52  }
     4.1 --- a/indra/llcommon/tea.h	Wed Nov 29 23:04:31 2017 +0100
     4.2 +++ b/indra/llcommon/tea.h	Wed Nov 29 23:04:58 2017 +0100
     4.3 @@ -41,12 +41,28 @@
     4.4  	Tea();
     4.5  	~Tea();
     4.6  
     4.7 -	static void setCurrency(const std::string& currency) { sCurrency = currency; }
     4.8 -	static std::string getCurrency() { return sCurrency; }
     4.9 +	static void setCurrency(const std::string& currency);
    4.10 +	static void setRegionCurrency(const std::string& currency);
    4.11 +	static std::string getCurrency() { return sActiveCurrency; }
    4.12  	static std::string wrapCurrency(const std::string& to_substitute);
    4.13  	static void wrapCurrency(std::string& to_substitute);
    4.14  private:
    4.15 -	static std::string sCurrency;
    4.16 +	static std::string sGridCurrency;	// Grid wide default currency symbol eg: L$, G$, D$
    4.17 +	static std::string sRegionCurrency;	// Region currency symbol override; empty string means use grid symbol
    4.18 +	static std::string sActiveCurrency;	// Active currency symbol (Grid if region is empty string)
    4.19 +
    4.20 +	static void updateActiveCurrencySymbol();	// Updated on...
    4.21 +							// 	Startup to L$ (default set at top of cpp)
    4.22 +							// 	Login to Grid Currency (see llstartup)
    4.23 +							//	HG teleport to new Grid Currency (hopefully also llstartup)
    4.24 +							//	Entering region with currency module override to Region Currency (see lfsimfeaturehandler)
    4.25 +							// Ideally, this would trigger an update to mark any LLUIStrings with L$
    4.26 +							// symbols but without params to dirty to force re-execution and do any
    4.27 +							// necessary reloads of UI widgets, but llcommon really should include
    4.28 +							// systems from newview, so we've placed this function in lfsimfeaturehandler
    4.29 +							// and call it manually.  Aternatively, we could consider registering
    4.30 +							// that func with Tea to let Tea call it, but for the timebeing, I did
    4.31 +							// not want to complicate Tea which is rather simple.
    4.32  };
    4.33  
    4.34  #endif //TEA_H
     5.1 --- a/indra/llcorehttp/_httpoprequest.cpp	Wed Nov 29 23:04:31 2017 +0100
     5.2 +++ b/indra/llcorehttp/_httpoprequest.cpp	Wed Nov 29 23:04:58 2017 +0100
     5.3 @@ -539,6 +539,7 @@
     5.4  	long sslHostV(0L);
     5.5      long dnsCacheTimeout(-1L);
     5.6      long nobody(0L);
     5.7 +	long last_modified(0L); // <FS:Ansariel> GetIfModified request
     5.8  
     5.9  	if (mReqOptions)
    5.10  	{
    5.11 @@ -547,6 +548,7 @@
    5.12  		sslHostV = mReqOptions->getSSLVerifyHost() ? 2L : 0L;
    5.13  		dnsCacheTimeout = mReqOptions->getDNSCacheTimeout();
    5.14          nobody = mReqOptions->getHeadersOnly() ? 1L : 0L;
    5.15 +		last_modified = mReqOptions->getLastModified(); // <FS:Ansariel> GetIfModified request
    5.16  	}
    5.17  	code = curl_easy_setopt(mCurlHandle, CURLOPT_FOLLOWLOCATION, follow_redirect);
    5.18  	check_curl_easy_code(code, CURLOPT_FOLLOWLOCATION);
    5.19 @@ -559,6 +561,16 @@
    5.20      code = curl_easy_setopt(mCurlHandle, CURLOPT_NOBODY, nobody);
    5.21      check_curl_easy_code(code, CURLOPT_NOBODY);
    5.22  
    5.23 +	// <FS:Ansariel> GetIfModified request
    5.24 +	if (last_modified > 0)
    5.25 +	{
    5.26 +		code = curl_easy_setopt(mCurlHandle, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
    5.27 +		check_curl_easy_code(code, CURLOPT_TIMECONDITION);
    5.28 +		code = curl_easy_setopt(mCurlHandle, CURLOPT_TIMEVALUE, last_modified);
    5.29 +		check_curl_easy_code(code, CURLOPT_TIMEVALUE);
    5.30 +	}
    5.31 +	// </FS:Ansariel>
    5.32 +
    5.33  	// The Linksys WRT54G V5 router has an issue with frequent
    5.34  	// DNS lookups from LAN machines.  If they happen too often,
    5.35  	// like for every HTTP request, the router gets annoyed after
     6.1 --- a/indra/llcorehttp/httpoptions.cpp	Wed Nov 29 23:04:31 2017 +0100
     6.2 +++ b/indra/llcorehttp/httpoptions.cpp	Wed Nov 29 23:04:58 2017 +0100
     6.3 @@ -46,7 +46,8 @@
     6.4      mVerifyPeer(false),
     6.5      mVerifyHost(false),
     6.6      mDNSCacheTimeout(-1L),
     6.7 -    mNoBody(false)
     6.8 +    mNoBody(false),
     6.9 +	mLastModified(0) // <FS:Ansariel> GetIfModified request
    6.10  {}
    6.11  
    6.12  
    6.13 @@ -125,4 +126,11 @@
    6.14          setWantHeaders(true);
    6.15  }
    6.16  
    6.17 +// <FS:Ansariel> GetIfModified request
    6.18 +void HttpOptions::setLastModified(long last_modified)
    6.19 +{
    6.20 +	mLastModified = last_modified;
    6.21 +}
    6.22 +// </FS:Ansariel>
    6.23 +
    6.24  }   // end namespace LLCore
     7.1 --- a/indra/llcorehttp/httpoptions.h	Wed Nov 29 23:04:31 2017 +0100
     7.2 +++ b/indra/llcorehttp/httpoptions.h	Wed Nov 29 23:04:58 2017 +0100
     7.3 @@ -177,6 +177,14 @@
     7.4      {
     7.5          return mNoBody;
     7.6      }
     7.7 +
     7.8 +	// <FS:Ansariel> GetIfModified request
     7.9 +	void                setLastModified(long last_modified);
    7.10 +	long                getLastModified() const
    7.11 +	{
    7.12 +		return mLastModified;
    7.13 +	}
    7.14 +	// </FS:Ansariel>
    7.15  	
    7.16  protected:
    7.17  	bool				mWantHeaders;
    7.18 @@ -192,6 +200,7 @@
    7.19  	bool        		mVerifyHost;
    7.20  	int					mDNSCacheTimeout;
    7.21      bool                mNoBody;
    7.22 +	long				mLastModified; // <FS:Ansariel> GetIfModified request
    7.23  }; // end class HttpOptions
    7.24  
    7.25  
     8.1 --- a/indra/llimage/llimage.cpp	Wed Nov 29 23:04:31 2017 +0100
     8.2 +++ b/indra/llimage/llimage.cpp	Wed Nov 29 23:04:58 2017 +0100
     8.3 @@ -764,7 +764,11 @@
     8.4  	{
     8.5  		size = 0;
     8.6  		mWidth = mHeight = 0;
     8.7 -		mData = NULL;
     8.8 +		if (mData)
     8.9 +		{
    8.10 +			deleteData(); // virtual
    8.11 +			mData = NULL;
    8.12 +		}
    8.13  		addAllocationError();
    8.14  	}
    8.15  	mDataSize = size;
    8.16 @@ -792,6 +796,7 @@
    8.17  	disclaimMem(mDataSize);
    8.18  	mDataSize = size;
    8.19  	claimMem(mDataSize);
    8.20 +	mBadBufferAllocation = false;
    8.21  	return mData;
    8.22  }
    8.23  
     9.1 --- a/indra/llmessage/fscorehttputil.cpp	Wed Nov 29 23:04:31 2017 +0100
     9.2 +++ b/indra/llmessage/fscorehttputil.cpp	Wed Nov 29 23:04:58 2017 +0100
     9.3 @@ -116,13 +116,38 @@
     9.4  								   boost::bind(trivialGetCoroRaw, url, LLCore::HttpRequest::DEFAULT_POLICY_ID, aHeader, options, success, failure));
     9.5  	}
     9.6  
     9.7 -	LLCore::HttpHeaders::ptr_t createModifiedSinceHeader( time_t aTime )
     9.8 +	void trivialGetCoro(std::string url, time_t last_modified, completionCallback_t success, completionCallback_t failure)
     9.9  	{
    9.10 -		std::string strDate = LLDate::toHTTPDateString( gmtime( &aTime ), "%A, %d %b %Y %H:%M:%S GMT" );
    9.11 +		LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("trivialGetCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID));
    9.12 +		LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
    9.13 +		LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
    9.14  
    9.15 -		LLCore::HttpHeaders::ptr_t pHeader( new LLCore::HttpHeaders() );
    9.16 -		pHeader->append( "If-Modified-Since", strDate );
    9.17 -	
    9.18 -		return pHeader;
    9.19 +		httpOpts->setWantHeaders(true);
    9.20 +		httpOpts->setLastModified((long)last_modified);
    9.21 +
    9.22 +		LLSD result = httpAdapter->getAndSuspend(httpRequest, url, httpOpts);
    9.23 +
    9.24 +		LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
    9.25 +		LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
    9.26 +
    9.27 +		if (!status)
    9.28 +		{
    9.29 +			if (failure)
    9.30 +			{
    9.31 +				failure(httpResults);
    9.32 +			}
    9.33 +		}
    9.34 +		else
    9.35 +		{
    9.36 +			if (success)
    9.37 +			{
    9.38 +				success(result);
    9.39 +			}
    9.40 +		}
    9.41 +	}
    9.42 +
    9.43 +	void callbackHttpGet(const std::string &url, const time_t& last_modified, completionCallback_t success, completionCallback_t failure)
    9.44 +	{
    9.45 +		LLCoros::instance().launch("HttpCoroutineAdapter::genericGetCoro", boost::bind(&trivialGetCoro, url, last_modified, success, failure));
    9.46  	}
    9.47  }
    10.1 --- a/indra/llmessage/fscorehttputil.h	Wed Nov 29 23:04:31 2017 +0100
    10.2 +++ b/indra/llmessage/fscorehttputil.h	Wed Nov 29 23:04:58 2017 +0100
    10.3 @@ -38,10 +38,12 @@
    10.4  							 LLCore::HttpHeaders::ptr_t aHeader = LLCore::HttpHeaders::ptr_t(), LLCore::HttpOptions::ptr_t options = LLCore::HttpOptions::ptr_t());
    10.5  	void callbackHttpGetRaw(const std::string &url, completionCallback_t success = NULL, completionCallback_t failure = NULL,
    10.6  							LLCore::HttpHeaders::ptr_t aHeader = LLCore::HttpHeaders::ptr_t(), LLCore::HttpOptions::ptr_t options = LLCore::HttpOptions::ptr_t());
    10.7 +	void callbackHttpGet(const std::string &url, const time_t& last_modified, completionCallback_t success, completionCallback_t failure);
    10.8  
    10.9  	void trivialGetCoroRaw(std::string url, LLCore::HttpRequest::policy_t policyId, LLCore::HttpHeaders::ptr_t aHeader, LLCore::HttpOptions::ptr_t options, completionCallback_t success, completionCallback_t failure);
   10.10  	void trivialPostCoroRaw(std::string url, LLCore::HttpRequest::policy_t policyId, LLCore::BufferArray::ptr_t postData, LLCore::HttpHeaders::ptr_t aHeader, LLCore::HttpOptions::ptr_t options,
   10.11  							completionCallback_t success, completionCallback_t failure);
   10.12 +	void trivialGetCoro(std::string url, time_t last_modified, completionCallback_t success, completionCallback_t failure);
   10.13  }
   10.14  
   10.15  #endif // FS_COREHTTPUTIL_H
    11.1 --- a/indra/llrender/llfontgl.cpp	Wed Nov 29 23:04:31 2017 +0100
    11.2 +++ b/indra/llrender/llfontgl.cpp	Wed Nov 29 23:04:58 2017 +0100
    11.3 @@ -1077,7 +1077,7 @@
    11.4  //static
    11.5  LLFontGL* LLFontGL::getFontScripting()
    11.6  {
    11.7 -	static LLFontGL* fontp = getFont(LLFontDescriptor("Scripting","Monospace",0));
    11.8 +	static LLFontGL* fontp = getFont(LLFontDescriptor("Scripting","Scripting",0));
    11.9  	return fontp;
   11.10  }
   11.11  
   11.12 @@ -1131,6 +1131,10 @@
   11.13  	{
   11.14  		return getFontOCRA();
   11.15  	}
   11.16 +	else if (name == "Scripting")
   11.17 +	{
   11.18 +		return getFontScripting();
   11.19 +	}
   11.20  	// </FS:CR>
   11.21  	else
   11.22  	{
    12.1 --- a/indra/llrender/llfontregistry.cpp	Wed Nov 29 23:04:31 2017 +0100
    12.2 +++ b/indra/llrender/llfontregistry.cpp	Wed Nov 29 23:04:58 2017 +0100
    12.3 @@ -153,6 +153,10 @@
    12.4  	// For other fonts, there's no ambiguity between font name and size specifier.
    12.5  	if (new_size != s_template_string && new_size.empty() && findSubString(new_name,"Monospace"))
    12.6  		new_size = "Monospace";
    12.7 +	// <FS:Ansariel> Advanced script editor
    12.8 +	if (new_size != s_template_string && new_size.empty() && findSubString(new_name,"Scripting"))
    12.9 +		new_size = "Scripting";
   12.10 +	// </FS:Ansariel>
   12.11  	if (new_size.empty())
   12.12  		new_size = "Medium";
   12.13  
    13.1 --- a/indra/llrender/llvertexbuffer.cpp	Wed Nov 29 23:04:31 2017 +0100
    13.2 +++ b/indra/llrender/llvertexbuffer.cpp	Wed Nov 29 23:04:58 2017 +0100
    13.3 @@ -2084,7 +2084,21 @@
    13.4  					const MappedRegion& region = mMappedVertexRegions[i];
    13.5  					S32 offset = region.mIndex >= 0 ? mOffsets[region.mType]+sTypeSize[region.mType]*region.mIndex : 0;
    13.6  					S32 length = sTypeSize[region.mType]*region.mCount;
    13.7 -					glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, offset, length, (U8*) mMappedData+offset);
    13.8 +					if (mSize >= length + offset)
    13.9 +					{
   13.10 +						glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, offset, length, (U8*)mMappedData + offset);
   13.11 +					}
   13.12 +					else
   13.13 +					{
   13.14 +						GLint size = 0;
   13.15 +						glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size);
   13.16 +						LL_WARNS() << "Attempted to map regions to a buffer that is too small, " 
   13.17 +							<< "mapped size: " << mSize
   13.18 +							<< ", gl buffer size: " << size
   13.19 +							<< ", length: " << length
   13.20 +							<< ", offset: " << offset
   13.21 +							<< LL_ENDL;
   13.22 +					}
   13.23  					stop_glerror();
   13.24  				}
   13.25  
   13.26 @@ -2154,7 +2168,21 @@
   13.27  					const MappedRegion& region = mMappedIndexRegions[i];
   13.28  					S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0;
   13.29  					S32 length = sizeof(U16)*region.mCount;
   13.30 -					glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, (U8*) mMappedIndexData+offset);
   13.31 +					if (mIndicesSize >= length + offset)
   13.32 +					{
   13.33 +						glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, (U8*) mMappedIndexData+offset);
   13.34 +					}
   13.35 +					else
   13.36 +					{
   13.37 +						GLint size = 0;
   13.38 +						glGetBufferParameterivARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size);
   13.39 +						LL_WARNS() << "Attempted to map regions to a buffer that is too small, " 
   13.40 +							<< "mapped size: " << mIndicesSize
   13.41 +							<< ", gl buffer size: " << size
   13.42 +							<< ", length: " << length
   13.43 +							<< ", offset: " << offset
   13.44 +							<< LL_ENDL;
   13.45 +					}
   13.46  					stop_glerror();
   13.47  				}
   13.48  
    14.1 --- a/indra/llui/llbutton.h	Wed Nov 29 23:04:31 2017 +0100
    14.2 +++ b/indra/llui/llbutton.h	Wed Nov 29 23:04:58 2017 +0100
    14.3 @@ -286,6 +286,11 @@
    14.4  	
    14.5  	void 		setAutoResize(bool auto_resize) { mAutoResize = auto_resize; }
    14.6  
    14.7 +	// <COLOSI opensim multi-currency support>
    14.8 +	// Set all LLUIStrings to dirty after currency symbol change to force them to be updated.
    14.9 +	void updateCurrencySymbols() { mUnselectedLabel.updateCurrencySymbols(); mSelectedLabel.updateCurrencySymbols(); mDisabledSelectedLabel.updateCurrencySymbols(); }
   14.10 +	// </COLOSI opensim multi-currency support>
   14.11 +
   14.12  protected:
   14.13  	LLPointer<LLUIImage> getImageUnselected() const	{ return mImageUnselected; }
   14.14  	LLPointer<LLUIImage> getImageSelected() const	{ return mImageSelected; }
    15.1 --- a/indra/llui/llfloater.h	Wed Nov 29 23:04:31 2017 +0100
    15.2 +++ b/indra/llui/llfloater.h	Wed Nov 29 23:04:58 2017 +0100
    15.3 @@ -373,6 +373,11 @@
    15.4  	void			enableResizeCtrls(bool enable, bool width = true, bool height = true);
    15.5  
    15.6  	bool			isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mPositioning); }
    15.7 +	
    15.8 +	// <COLOSI opensim multi-currency support>
    15.9 +	// update currency symbols in titles (if there) and force update of display
   15.10 +	void			updateCurrencySymbols() { mTitle.updateCurrencySymbols(); mShortTitle.updateCurrencySymbols(); applyTitle(); }
   15.11 +	// </COLOSI opensim multi-currency support>
   15.12  protected:
   15.13  	void			applyControlsAndPosition(LLFloater* other);
   15.14  
    16.1 --- a/indra/llui/llkeywords.cpp	Wed Nov 29 23:04:31 2017 +0100
    16.2 +++ b/indra/llui/llkeywords.cpp	Wed Nov 29 23:04:58 2017 +0100
    16.3 @@ -514,7 +514,12 @@
    16.4  
    16.5  	S32 text_len = wtext.size() + 1;
    16.6  
    16.7 -	seg_list->push_back( new LLNormalTextSegment( defaultColor, 0, text_len, editor ) );
    16.8 +	// <FS:Ansariel> Script editor ignoring font selection
    16.9 +	//seg_list->push_back( new LLNormalTextSegment( defaultColor, 0, text_len, editor ) );
   16.10 +	LLStyleSP style = getDefaultStyle(editor);
   16.11 +	style->setColor(defaultColor);
   16.12 +	seg_list->push_back( new LLNormalTextSegment( style, 0, text_len, editor ) );
   16.13 +	// </FS:Ansariel>
   16.14  
   16.15  	const llwchar* base = wtext.c_str();
   16.16  	const llwchar* cur = base;
   16.17 @@ -524,7 +529,10 @@
   16.18  		{
   16.19  			if( *cur == '\n' )
   16.20  			{
   16.21 -				LLTextSegmentPtr text_segment = new LLLineBreakTextSegment(cur-base);
   16.22 +				// <FS:Ansariel> Script editor ignoring font selection
   16.23 +				//LLTextSegmentPtr text_segment = new LLLineBreakTextSegment(cur-base);
   16.24 +				LLTextSegmentPtr text_segment = new LLLineBreakTextSegment(getDefaultStyle(editor), cur-base);
   16.25 +				// </FS:Ansariel>
   16.26  				text_segment->setToken( 0 );
   16.27  				insertSegment( *seg_list, text_segment, text_len, defaultColor, editor);
   16.28  				cur++;
   16.29 @@ -673,7 +681,13 @@
   16.30  
   16.31  					insertSegments(wtext, *seg_list,cur_delimiter, text_len, seg_start, seg_end, defaultColor, editor);
   16.32  					/*
   16.33 -					LLTextSegmentPtr text_segment = new LLNormalTextSegment( cur_delimiter->getColor(), seg_start, seg_end, editor );
   16.34 +					// <FS:Ansariel> Script editor ignoring font selection
   16.35 +					//LLTextSegmentPtr text_segment = new LLNormalTextSegment( cur_delimiter->getColor(), seg_start, seg_end, editor );
   16.36 +					LLStyleSP seg_style = getDefaultStyle(editor);
   16.37 +					seg_style->setColor(defaultColor);
   16.38 +					LLTextSegmentPtr text_segment = new LLNormalTextSegment( seg_style, seg_start, seg_end, editor );
   16.39 +					// </FS:Ansariel>
   16.40 +
   16.41  					text_segment->setToken( cur_delimiter );
   16.42  					insertSegment( seg_list, text_segment, text_len, defaultColor, editor);
   16.43  					*/
   16.44 @@ -732,12 +746,20 @@
   16.45  	{
   16.46  		if (pos!=seg_start)
   16.47  		{
   16.48 -			LLTextSegmentPtr text_segment = new LLNormalTextSegment( cur_token->getColor(), seg_start, pos, editor );
   16.49 +			// <FS:Ansariel> Script editor ignoring font selection
   16.50 +			//LLTextSegmentPtr text_segment = new LLNormalTextSegment( cur_token->getColor(), seg_start, pos, editor );
   16.51 +			LLStyleSP style = getDefaultStyle(editor);
   16.52 +			style->setColor(cur_token->getColor());
   16.53 +			LLTextSegmentPtr text_segment = new LLNormalTextSegment( style, seg_start, pos, editor );
   16.54 +			// </FS:Ansariel>
   16.55  			text_segment->setToken( cur_token );
   16.56  			insertSegment( seg_list, text_segment, text_len, defaultColor, editor);
   16.57  		}
   16.58  
   16.59 -		LLTextSegmentPtr text_segment = new LLLineBreakTextSegment(pos);
   16.60 +		// <FS:Ansariel> Script editor ignoring font selection
   16.61 +		//LLTextSegmentPtr text_segment = new LLLineBreakTextSegment(pos);
   16.62 +		LLTextSegmentPtr text_segment = new LLLineBreakTextSegment(getDefaultStyle(editor), pos);
   16.63 +		// </FS:Ansariel>
   16.64  		text_segment->setToken( cur_token );
   16.65  		insertSegment( seg_list, text_segment, text_len, defaultColor, editor);
   16.66  
   16.67 @@ -745,7 +767,12 @@
   16.68  		pos = wtext.find('\n',seg_start);
   16.69  	}
   16.70  
   16.71 -	LLTextSegmentPtr text_segment = new LLNormalTextSegment( cur_token->getColor(), seg_start, seg_end, editor );
   16.72 +	// <FS:Ansariel> Script editor ignoring font selection
   16.73 +	//LLTextSegmentPtr text_segment = new LLNormalTextSegment( cur_token->getColor(), seg_start, seg_end, editor );
   16.74 +	LLStyleSP style = getDefaultStyle(editor);
   16.75 +	style->setColor(cur_token->getColor());
   16.76 +	LLTextSegmentPtr text_segment = new LLNormalTextSegment( style, seg_start, seg_end, editor );
   16.77 +	// </FS:Ansariel>
   16.78  	text_segment->setToken( cur_token );
   16.79  	insertSegment( seg_list, text_segment, text_len, defaultColor, editor);
   16.80  }
   16.81 @@ -767,7 +794,12 @@
   16.82  
   16.83  	if( new_seg_end < text_len )
   16.84  	{
   16.85 -		seg_list.push_back( new LLNormalTextSegment( defaultColor, new_seg_end, text_len, editor ) );
   16.86 +		// <FS:Ansariel> Script editor ignoring font selection
   16.87 +		//seg_list.push_back( new LLNormalTextSegment( defaultColor, new_seg_end, text_len, editor ) );
   16.88 +		LLStyleSP style = getDefaultStyle(editor);
   16.89 +		style->setColor(defaultColor);
   16.90 +		seg_list.push_back( new LLNormalTextSegment( style, new_seg_end, text_len, editor ) );
   16.91 +		// </FS:Ansariel>
   16.92  	}
   16.93  }
   16.94  
   16.95 @@ -920,6 +952,15 @@
   16.96  }
   16.97  // </FS:Ansariel>
   16.98  
   16.99 +// <FS:Ansariel> Script editor ignoring font selection
  16.100 +LLStyleSP LLKeywords::getDefaultStyle(const LLTextEditor& editor)
  16.101 +{
  16.102 +	LLStyleSP style(new LLStyle(LLStyle::Params()));
  16.103 +	style->setFont(editor.getFont());
  16.104 +	return style;
  16.105 +}
  16.106 +// </FS:Ansariel>
  16.107 +
  16.108  #ifdef _DEBUG
  16.109  void LLKeywords::dump()
  16.110  {
    17.1 --- a/indra/llui/llkeywords.h	Wed Nov 29 23:04:31 2017 +0100
    17.2 +++ b/indra/llui/llkeywords.h	Wed Nov 29 23:04:58 2017 +0100
    17.3 @@ -37,6 +37,10 @@
    17.4  #include <deque>
    17.5  #include "llpointer.h"
    17.6  
    17.7 +// <FS:Ansariel> Script editor ignoring font selection
    17.8 +class LLStyle;
    17.9 +typedef LLPointer<LLStyle> LLStyleSP;
   17.10 +// </FS:Ansariel
   17.11  class LLTextSegment;
   17.12  typedef LLPointer<LLTextSegment> LLTextSegmentPtr;
   17.13  
   17.14 @@ -199,6 +203,9 @@
   17.15  	std::string	getAttribute(const std::string& key);
   17.16  
   17.17  	std::string	getArguments(LLSD& arguments);
   17.18 +
   17.19 +	// <FS:Ansariel> Script editor ignoring font selection
   17.20 +	LLStyleSP getDefaultStyle(const LLTextEditor& editor);
   17.21  };
   17.22  
   17.23  #endif  // LL_LLKEYWORDS_H
    18.1 --- a/indra/llui/llresmgr.cpp	Wed Nov 29 23:04:31 2017 +0100
    18.2 +++ b/indra/llui/llresmgr.cpp	Wed Nov 29 23:04:58 2017 +0100
    18.3 @@ -254,6 +254,7 @@
    18.4  	}
    18.5  	
    18.6  	// *NOTE: this method does not handle negative input integers correctly
    18.7 +	output.clear(); // <FS:Ansariel> Clear string in case it gets reused multiple times
    18.8  	S32 fraction = 0;
    18.9  	std::string fraction_string;
   18.10  	S32 remaining_count = input;
    19.1 --- a/indra/llui/lltextbox.h	Wed Nov 29 23:04:31 2017 +0100
    19.2 +++ b/indra/llui/lltextbox.h	Wed Nov 29 23:04:58 2017 +0100
    19.3 @@ -68,6 +68,11 @@
    19.4  	/*virtual*/ LLSD	getValue() const;
    19.5  	/*virtual*/ BOOL	setTextArg( const std::string& key, const LLStringExplicit& text );
    19.6  
    19.7 +	// <COLOSI opensim multi-currency support>
    19.8 + 	// Set all LLUIStrings to dirty after currency symbol change to force them to be updated.
    19.9 +	void updateCurrencySymbols() { mText.updateCurrencySymbols(); LLTextBase::setText(mText.getString()); mLabel.updateCurrencySymbols(); }
   19.10 +	// </COLOSI opensim multi-currency support>
   19.11 +
   19.12  protected:
   19.13  	void            onUrlLabelUpdated(const std::string &url, const std::string &label);
   19.14  
    20.1 --- a/indra/llui/lluictrl.cpp	Wed Nov 29 23:04:31 2017 +0100
    20.2 +++ b/indra/llui/lluictrl.cpp	Wed Nov 29 23:04:58 2017 +0100
    20.3 @@ -1000,7 +1000,7 @@
    20.4  
    20.5  F32 LLUICtrl::getCurrentTransparency()
    20.6  {
    20.7 -	F32 alpha = 0;
    20.8 +	F32 alpha = 0.f;
    20.9  
   20.10  	switch(mTransparencyType)
   20.11  	{
   20.12 @@ -1017,12 +1017,12 @@
   20.13  		break;
   20.14  
   20.15  	case TT_FADING:
   20.16 -		alpha = sInactiveControlTransparency / 2;
   20.17 +		alpha = sInactiveControlTransparency / 2.f;
   20.18  		break;
   20.19  
   20.20  	// <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
   20.21  	case TT_FORCE_OPAQUE:
   20.22 -		alpha = 1;
   20.23 +		alpha = 1.f;
   20.24  		break;
   20.25  	// </FS:PP>
   20.26  
    21.1 --- a/indra/llui/lluistring.h	Wed Nov 29 23:04:31 2017 +0100
    21.2 +++ b/indra/llui/lluistring.h	Wed Nov 29 23:04:58 2017 +0100
    21.3 @@ -90,6 +90,13 @@
    21.4  	void insert(S32 charidx, const LLWString& wchars);
    21.5  	void replace(S32 charidx, llwchar wc);
    21.6  
    21.7 +	// <COLOSI opensim multi-currency support>
    21.8 +	// Need a public method for setting an lluistring to dirty when we change
    21.9 +	// currency symbols.  This will force the text to be re-wrapped on the next
   21.10 +	// get call with Tea::wrapCurrency()
   21.11 +	void updateCurrencySymbols() { dirty(); }
   21.12 +	// </COLOSI opensim multi-currency support>
   21.13 +
   21.14  private:
   21.15  	// something changed, requiring reformatting of strings
   21.16  	void dirty();
    22.1 --- a/indra/llwindow/llwindowwin32.cpp	Wed Nov 29 23:04:31 2017 +0100
    22.2 +++ b/indra/llwindow/llwindowwin32.cpp	Wed Nov 29 23:04:58 2017 +0100
    22.3 @@ -423,6 +423,9 @@
    22.4  	mKeyVirtualKey = 0;
    22.5  	mhDC = NULL;
    22.6  	mhRC = NULL;
    22.7 +	memset(mCurrentGammaRamp, 0, sizeof(mCurrentGammaRamp));
    22.8 +	memset(mPrevGammaRamp, 0, sizeof(mPrevGammaRamp));
    22.9 +	mCustomGammaSet = FALSE;
   22.10  	
   22.11  	// <FS:Ansariel> Respect "Hide pointer while typing" Windows preference setting
   22.12  	if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &mMouseVanish, 0))
   22.13 @@ -788,7 +791,7 @@
   22.14  
   22.15  	if (mhDC && !ReleaseDC(mWindowHandle, mhDC))
   22.16  	{
   22.17 -		LL_WARNS("Window") << "Release of ghDC failed" << LL_ENDL;
   22.18 +		LL_WARNS("Window") << "Release of mhDC failed" << LL_ENDL;
   22.19  		mhDC = NULL;
   22.20  	}
   22.21  
   22.22 @@ -2991,13 +2994,26 @@
   22.23  
   22.24  BOOL LLWindowWin32::restoreGamma()
   22.25  {
   22.26 -	return SetDeviceGammaRamp(mhDC, mPrevGammaRamp);
   22.27 +	if (mCustomGammaSet != FALSE)
   22.28 +	{
   22.29 +		mCustomGammaSet = FALSE;
   22.30 +		return SetDeviceGammaRamp(mhDC, mPrevGammaRamp);
   22.31 +	}
   22.32 +	return TRUE;
   22.33  }
   22.34  
   22.35  BOOL LLWindowWin32::setGamma(const F32 gamma)
   22.36  {
   22.37  	mCurrentGamma = gamma;
   22.38  
   22.39 +	//Get the previous gamma ramp to restore later.
   22.40 +	if (mCustomGammaSet == FALSE)
   22.41 +	{
   22.42 +		if (GetDeviceGammaRamp(mhDC, mPrevGammaRamp) == FALSE)
   22.43 +			return FALSE;
   22.44 +		mCustomGammaSet = TRUE;
   22.45 +	}
   22.46 +
   22.47  	LL_DEBUGS("Window") << "Setting gamma to " << gamma << LL_ENDL;
   22.48  
   22.49  	for ( int i = 0; i < 256; ++i )
   22.50 @@ -3009,9 +3025,9 @@
   22.51  		if ( value > 0xffff )
   22.52  			value = 0xffff;
   22.53  
   22.54 -		mCurrentGammaRamp [ 0 * 256 + i ] = 
   22.55 -			mCurrentGammaRamp [ 1 * 256 + i ] = 
   22.56 -				mCurrentGammaRamp [ 2 * 256 + i ] = ( WORD )value;
   22.57 +		mCurrentGammaRamp[0][i] =
   22.58 +			mCurrentGammaRamp[1][i] =
   22.59 +			mCurrentGammaRamp[2][i] = (WORD) value;
   22.60  	};
   22.61  
   22.62  	return SetDeviceGammaRamp ( mhDC, mCurrentGammaRamp );
    23.1 --- a/indra/llwindow/llwindowwin32.h	Wed Nov 29 23:04:31 2017 +0100
    23.2 +++ b/indra/llwindow/llwindowwin32.h	Wed Nov 29 23:04:58 2017 +0100
    23.3 @@ -194,8 +194,9 @@
    23.4  
    23.5  	F32			mCurrentGamma;
    23.6  	U32			mFSAASamples;
    23.7 -	WORD		mPrevGammaRamp[256*3];
    23.8 -	WORD		mCurrentGammaRamp[256*3];
    23.9 +	WORD		mPrevGammaRamp[3][256];
   23.10 +	WORD		mCurrentGammaRamp[3][256];
   23.11 +	BOOL		mCustomGammaSet;
   23.12  
   23.13  	LPWSTR		mIconResource;
   23.14  	BOOL		mMousePositionModified;
    24.1 --- a/indra/newview/app_settings/logcontrol.xml	Wed Nov 29 23:04:31 2017 +0100
    24.2 +++ b/indra/newview/app_settings/logcontrol.xml	Wed Nov 29 23:04:58 2017 +0100
    24.3 @@ -60,7 +60,6 @@
    24.4  						-->
    24.5  						     <string>import</string>
    24.6  						     <string>export</string>
    24.7 -							 <string>SLURL</string>
    24.8  							 <string>Outfit</string>
    24.9  						</array>
   24.10  				</map>
    25.1 --- a/indra/newview/chatbar_as_cmdline.cpp	Wed Nov 29 23:04:31 2017 +0100
    25.2 +++ b/indra/newview/chatbar_as_cmdline.cpp	Wed Nov 29 23:04:58 2017 +0100
    25.3 @@ -1734,7 +1734,7 @@
    25.4  
    25.5  	LLVolumeParams volume_params;
    25.6  
    25.7 -	volume_params.setType(LL_PCODE_PROFILE_CIRCLE, LL_PCODE_PATH_LINE);
    25.8 +	volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE);
    25.9  	volume_params.setBeginAndEndS(0.f, 1.f);
   25.10  	volume_params.setBeginAndEndT(0.f, 1.f);
   25.11  	volume_params.setRatio(1.f, 1.f);
   25.12 @@ -1743,7 +1743,7 @@
   25.13  	LLVolumeMessage::packVolumeParams(&volume_params, msg);
   25.14  	LLVector3 rezpos = agentPos - LLVector3(0.0f, 0.0f, 2.5f);
   25.15  	LLQuaternion rotation;
   25.16 -	rotation.setQuat(90.f * DEG_TO_RAD, LLVector3::y_axis);
   25.17 +	rotation.setQuat(0.f, LLVector3::y_axis);
   25.18  
   25.19  	static LLCachedControl<F32> sFSCmdLinePlatformSize(gSavedSettings, "FSCmdLinePlatformSize");
   25.20  
   25.21 @@ -1763,7 +1763,7 @@
   25.22  		realsize = max_scale;
   25.23  	}
   25.24  
   25.25 -	msg->addVector3Fast(_PREHASH_Scale, LLVector3(0.01f, realsize, realsize));
   25.26 +	msg->addVector3Fast(_PREHASH_Scale, LLVector3(realsize, realsize, 0.01f));
   25.27  	msg->addQuatFast(_PREHASH_Rotation, rotation);
   25.28  	msg->addVector3Fast(_PREHASH_RayStart, rezpos);
   25.29  	msg->addVector3Fast(_PREHASH_RayEnd, rezpos);
    26.1 --- a/indra/newview/fonts/fonts.xml	Wed Nov 29 23:04:31 2017 +0100
    26.2 +++ b/indra/newview/fonts/fonts.xml	Wed Nov 29 23:04:58 2017 +0100
    26.3 @@ -11,6 +11,7 @@
    26.4        <file>ArialUni.ttf</file>
    26.5        <file>seguisym.ttf</file>
    26.6        <file>nirmala.ttf</file>
    26.7 +      <file>tahoma.ttf</file>
    26.8      </os>
    26.9      <os name="Mac">
   26.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   26.11 @@ -159,7 +160,7 @@
   26.12  
   26.13    <font_size name="Scripting"
   26.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   26.15 -	     size="9.6"
   26.16 +	     size="8.6"
   26.17  	     />
   26.18    <font_size name="Monospace"
   26.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    27.1 --- a/indra/newview/fonts/fonts_deja_vu_all_caps.xml	Wed Nov 29 23:04:31 2017 +0100
    27.2 +++ b/indra/newview/fonts/fonts_deja_vu_all_caps.xml	Wed Nov 29 23:04:58 2017 +0100
    27.3 @@ -11,6 +11,7 @@
    27.4        <file>ArialUni.ttf</file>
    27.5        <file>seguisym.ttf</file>
    27.6        <file>nirmala.ttf</file>
    27.7 +      <file>tahoma.ttf</file>
    27.8      </os>
    27.9      <os name="Mac">
   27.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   27.11 @@ -159,7 +160,7 @@
   27.12  
   27.13    <font_size name="Scripting"
   27.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   27.15 -	     size="9.6"
   27.16 +	     size="8.6"
   27.17  	     />
   27.18    <font_size name="Monospace"
   27.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    28.1 --- a/indra/newview/fonts/fonts_droid.xml	Wed Nov 29 23:04:31 2017 +0100
    28.2 +++ b/indra/newview/fonts/fonts_droid.xml	Wed Nov 29 23:04:58 2017 +0100
    28.3 @@ -11,6 +11,7 @@
    28.4        <file>ArialUni.ttf</file>
    28.5        <file>seguisym.ttf</file>
    28.6        <file>nirmala.ttf</file>
    28.7 +      <file>tahoma.ttf</file>
    28.8      </os>
    28.9      <os name="Mac">
   28.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   28.11 @@ -159,7 +160,7 @@
   28.12  
   28.13    <font_size name="Scripting"
   28.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   28.15 -	     size="9.6"
   28.16 +	     size="10.0"
   28.17  	     />
   28.18    <font_size name="Monospace"
   28.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    29.1 --- a/indra/newview/fonts/fonts_dyslexia.xml	Wed Nov 29 23:04:31 2017 +0100
    29.2 +++ b/indra/newview/fonts/fonts_dyslexia.xml	Wed Nov 29 23:04:58 2017 +0100
    29.3 @@ -11,6 +11,7 @@
    29.4        <file>ArialUni.ttf</file>
    29.5        <file>seguisym.ttf</file>
    29.6        <file>nirmala.ttf</file>
    29.7 +      <file>tahoma.ttf</file>
    29.8      </os>
    29.9      <os name="Mac">
   29.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   29.11 @@ -159,7 +160,7 @@
   29.12  
   29.13    <font_size name="Scripting"
   29.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   29.15 -	     size="9.6"
   29.16 +	     size="10.0"
   29.17  	     />
   29.18    <font_size name="Monospace"
   29.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    30.1 --- a/indra/newview/fonts/fonts_liberation.xml	Wed Nov 29 23:04:31 2017 +0100
    30.2 +++ b/indra/newview/fonts/fonts_liberation.xml	Wed Nov 29 23:04:58 2017 +0100
    30.3 @@ -11,6 +11,7 @@
    30.4        <file>ArialUni.ttf</file>
    30.5        <file>seguisym.ttf</file>
    30.6        <file>nirmala.ttf</file>
    30.7 +      <file>tahoma.ttf</file>
    30.8      </os>
    30.9      <os name="Mac">
   30.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   30.11 @@ -159,7 +160,7 @@
   30.12  
   30.13    <font_size name="Scripting"
   30.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   30.15 -	     size="9.6"
   30.16 +	     size="10.0"
   30.17  	     />
   30.18    <font_size name="Monospace"
   30.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    31.1 --- a/indra/newview/fonts/fonts_mobi.xml	Wed Nov 29 23:04:31 2017 +0100
    31.2 +++ b/indra/newview/fonts/fonts_mobi.xml	Wed Nov 29 23:04:58 2017 +0100
    31.3 @@ -11,6 +11,7 @@
    31.4        <file>ArialUni.ttf</file>
    31.5        <file>seguisym.ttf</file>
    31.6        <file>nirmala.ttf</file>
    31.7 +      <file>tahoma.ttf</file>
    31.8      </os>
    31.9      <os name="Mac">
   31.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   31.11 @@ -159,7 +160,7 @@
   31.12  
   31.13    <font_size name="Scripting"
   31.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   31.15 -	     size="9.6"
   31.16 +	     size="10.0"
   31.17  	     />
   31.18    <font_size name="Monospace"
   31.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    32.1 --- a/indra/newview/fonts/fonts_noto.xml	Wed Nov 29 23:04:31 2017 +0100
    32.2 +++ b/indra/newview/fonts/fonts_noto.xml	Wed Nov 29 23:04:58 2017 +0100
    32.3 @@ -11,6 +11,7 @@
    32.4        <file>ArialUni.ttf</file>
    32.5        <file>seguisym.ttf</file>
    32.6        <file>nirmala.ttf</file>
    32.7 +      <file>tahoma.ttf</file>
    32.8      </os>
    32.9      <os name="Mac">
   32.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   32.11 @@ -159,7 +160,7 @@
   32.12  
   32.13    <font_size name="Scripting"
   32.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   32.15 -	     size="9.6"
   32.16 +	     size="10.0"
   32.17  	     />
   32.18    <font_size name="Monospace"
   32.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    33.1 --- a/indra/newview/fonts/fonts_roboto.xml	Wed Nov 29 23:04:31 2017 +0100
    33.2 +++ b/indra/newview/fonts/fonts_roboto.xml	Wed Nov 29 23:04:58 2017 +0100
    33.3 @@ -11,6 +11,7 @@
    33.4        <file>ArialUni.ttf</file>
    33.5        <file>seguisym.ttf</file>
    33.6        <file>nirmala.ttf</file>
    33.7 +      <file>tahoma.ttf</file>
    33.8      </os>
    33.9      <os name="Mac">
   33.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   33.11 @@ -159,7 +160,7 @@
   33.12  
   33.13    <font_size name="Scripting"
   33.14  	     comment="Size of script editor font (points, or 1/72 of an inch)"
   33.15 -	     size="9.6"
   33.16 +	     size="10.0"
   33.17  	     />
   33.18    <font_size name="Monospace"
   33.19  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
    34.1 --- a/indra/newview/fonts/fonts_ubuntu.xml	Wed Nov 29 23:04:31 2017 +0100
    34.2 +++ b/indra/newview/fonts/fonts_ubuntu.xml	Wed Nov 29 23:04:58 2017 +0100
    34.3 @@ -11,6 +11,7 @@
    34.4        <file>ArialUni.ttf</file>
    34.5        <file>seguisym.ttf</file>
    34.6        <file>nirmala.ttf</file>
    34.7 +      <file>tahoma.ttf</file>
    34.8      </os>
    34.9      <os name="Mac">
   34.10        <file>ヒラギノ角ゴシック W3.ttc</file>
   34.11 @@ -161,6 +162,10 @@
   34.12      <file>DejaVuSans.ttf</file>
   34.13    </font>
   34.14  
   34.15 +  <font_size name="Scripting"
   34.16 +	     comment="Size of script editor font (points, or 1/72 of an inch)"
   34.17 +	     size="9.6"
   34.18 +	     />
   34.19    <font_size name="Monospace"
   34.20  	     comment="Size for monospaced font (points, or 1/72 of an inch)"
   34.21  	     size="8.0"
    35.1 --- a/indra/newview/fsdata.cpp	Wed Nov 29 23:04:31 2017 +0100
    35.2 +++ b/indra/newview/fsdata.cpp	Wed Nov 29 23:04:58 2017 +0100
    35.3 @@ -237,14 +237,14 @@
    35.4  {
    35.5  	LL_DEBUGS() << aData << LL_ENDL;
    35.6  	LLSD header = aData[ LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS ][ LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_HEADERS];
    35.7 -    LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD( aData[ LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS ] );
    35.8 +	LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD( aData[ LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS ] );
    35.9  
   35.10  	LLDate lastModified;
   35.11  	if (header.has("last-modified"))
   35.12  	{
   35.13  		lastModified.secondsSinceEpoch( FSCommon::secondsSinceEpochFromString( "%a, %d %b %Y %H:%M:%S %ZP", header["last-modified"].asString() ) );
   35.14  	}
   35.15 -    const LLSD::Binary &rawData = aData[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_RAW].asBinary();
   35.16 +	const LLSD::Binary &rawData = aData[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_RAW].asBinary();
   35.17  
   35.18  	if ( status.getType() == HTTP_NOT_MODIFIED )
   35.19  	{
   35.20 @@ -285,7 +285,19 @@
   35.21  void downloadError( LLSD const &aData, std::string const &aURL )
   35.22  {
   35.23  	LL_WARNS() << "Failed to download " << aURL << ": " << aData << LL_ENDL;
   35.24 -	// FSData::getInstance()->processResponder(getContent(), mURL, false, mLastModified);
   35.25 +	FSData::instance().checkDone(aURL);
   35.26 +}
   35.27 +
   35.28 +void FSData::checkDone(const std::string& url)
   35.29 +{
   35.30 +	if (url == mFSDataURL)
   35.31 +	{
   35.32 +		mFSDataDone = true;
   35.33 +	}
   35.34 +	else if (url == mAgentsURL)
   35.35 +	{
   35.36 +		mAgentsDone = true;
   35.37 +	}
   35.38  }
   35.39  
   35.40  // call this just before the login screen and after the LLProxy has been setup.
   35.41 @@ -303,11 +315,8 @@
   35.42  		last_modified = stat_data.st_mtime;
   35.43  	}
   35.44  	LL_INFOS("fsdata") << "Downloading data.xml from " << mFSDataURL << " with last modifed of " << last_modified << LL_ENDL;
   35.45 +	FSCoreHttpUtil::callbackHttpGet(mFSDataURL, last_modified, boost::bind(downloadComplete, _1, mFSDataURL), boost::bind(downloadError, _1, mFSDataURL));
   35.46  
   35.47 -	LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet( mFSDataURL, boost::bind( downloadComplete, _1, mFSDataURL ), boost::bind( downloadError, _1, mFSDataURL ) );
   35.48 -
   35.49 -	//LLHTTPClient::getIfModified(mFSDataURL, new FSDownloader(mFSDataURL), last_modified, mHeaders, HTTP_TIMEOUT);
   35.50 -	
   35.51  	last_modified = 0;
   35.52  	if(!LLFile::stat(mFSdataDefaultsFilename, &stat_data))
   35.53  	{
   35.54 @@ -316,7 +325,7 @@
   35.55  	std::string filename = llformat("defaults.%s.xml", LLVersionInfo::getShortVersion().c_str());
   35.56  	mFSdataDefaultsUrl = mBaseURL + "/" + filename;
   35.57  	LL_INFOS("fsdata") << "Downloading defaults.xml from " << mFSdataDefaultsUrl << " with last modifed of " << last_modified << LL_ENDL;
   35.58 -	LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet( mFSdataDefaultsUrl, boost::bind( downloadComplete, _1, mFSdataDefaultsUrl ), boost::bind( downloadError, _1, mFSdataDefaultsUrl ) );
   35.59 +	FSCoreHttpUtil::callbackHttpGet(mFSdataDefaultsUrl, last_modified, boost::bind(downloadComplete, _1, mFSdataDefaultsUrl), boost::bind(downloadError, _1, mFSdataDefaultsUrl));
   35.60  
   35.61  #if OPENSIM
   35.62  	std::string filenames[] = {"scriptlibrary_ossl.xml", "scriptlibrary_aa.xml"};
   35.63 @@ -330,7 +339,10 @@
   35.64  		}
   35.65  		std::string url = mBaseURL + "/" + script_name;
   35.66  		LL_INFOS("fsdata") << "Downloading " << script_name << " from " << url << " with last modifed of " << last_modified << LL_ENDL;
   35.67 -		FSCoreHttpUtil::callbackHttpGetRaw( url, boost::bind( downloadCompleteScript, _1, url, filename ), boost::bind( downloadError, _1, url ) );
   35.68 +		LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
   35.69 +		httpOpts->setWantHeaders(true);
   35.70 +		httpOpts->setLastModified((long)last_modified);
   35.71 +		FSCoreHttpUtil::callbackHttpGetRaw( url, boost::bind( downloadCompleteScript, _1, url, filename ), boost::bind( downloadError, _1, url ), LLCore::HttpHeaders::ptr_t(), httpOpts);
   35.72  	}
   35.73  #endif
   35.74  }
   35.75 @@ -361,35 +373,31 @@
   35.76  		mAssetsURL = mBaseURL + "/" + "assets.xml";
   35.77  	}
   35.78  	
   35.79 -	if (mAgentsURL.empty())
   35.80 +	if (!mAgentsURL.empty())
   35.81  	{
   35.82 -		// we can saftly presume if agents.xml URL is not present, assets.xml is not going to be present also
   35.83 -		return;
   35.84 +		mAgentsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename_prefix + "_agents.xml");
   35.85 +		time_t last_modified = 0;
   35.86 +		llstat stat_data;
   35.87 +		if(!LLFile::stat(mAgentsFilename, &stat_data))
   35.88 +		{
   35.89 +			last_modified = stat_data.st_mtime;
   35.90 +		}
   35.91 +		LL_INFOS("fsdata") << "Downloading agents.xml from " << mAgentsURL << " with last modifed of " << last_modified << LL_ENDL;
   35.92 +		FSCoreHttpUtil::callbackHttpGet(mAgentsURL, last_modified, boost::bind(downloadComplete, _1, mAgentsURL), boost::bind(downloadError, _1, mAgentsURL));
   35.93  	}
   35.94 -	
   35.95 -	mAgentsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename_prefix + "_agents.xml");
   35.96 -	time_t last_modified = 0;
   35.97 -	llstat stat_data;
   35.98 -	if(!LLFile::stat(mAgentsFilename, &stat_data))
   35.99 +
  35.100 +	if (!mAssetsURL.empty())
  35.101  	{
  35.102 -		last_modified = stat_data.st_mtime;
  35.103 +		mAssestsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename_prefix + "_assets.xml");
  35.104 +		time_t last_modified = 0;
  35.105 +		llstat stat_data;
  35.106 +		if(!LLFile::stat(mAssestsFilename, &stat_data))
  35.107 +		{
  35.108 +			last_modified = stat_data.st_mtime;
  35.109 +		}
  35.110 +		LL_INFOS("fsdata") << "Downloading assets.xml from " << mAssetsURL << " with last modifed of " << last_modified << LL_ENDL;
  35.111 +		FSCoreHttpUtil::callbackHttpGet(mAssetsURL, last_modified, boost::bind(downloadComplete, _1, mAssetsURL), boost::bind(downloadError, _1, mAssetsURL));
  35.112  	}
  35.113 -	LL_INFOS("fsdata") << "Downloading agents.xml from " << mAgentsURL << " with last modifed of " << last_modified << LL_ENDL;
  35.114 -	LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet( mAgentsURL, boost::bind( downloadComplete, _1, mAgentsURL ), boost::bind( downloadError, _1, mAgentsURL ) );
  35.115 -	
  35.116 -	if (mAssetsURL.empty())
  35.117 -	{
  35.118 -		return;
  35.119 -	}
  35.120 -	
  35.121 -	mAssestsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename_prefix + "_assets.xml");
  35.122 -	last_modified = 0;
  35.123 -	if(!LLFile::stat(mAssestsFilename, &stat_data))
  35.124 -	{
  35.125 -		last_modified = stat_data.st_mtime;
  35.126 -	}
  35.127 -	LL_INFOS("fsdata") << "Downloading assets.xml from " << mAssetsURL << " with last modifed of " << last_modified << LL_ENDL;
  35.128 -	LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet( mAssetsURL, boost::bind( downloadComplete, _1, mAssetsURL ), boost::bind( downloadError, _1, mAssetsURL ) );
  35.129  }
  35.130  
  35.131  void FSData::processData(const LLSD& fs_data)
  35.132 @@ -455,7 +463,7 @@
  35.133  			last_modified = stat_data.st_mtime;
  35.134  		}
  35.135  		LL_INFOS("fsdata") << "Downloading client_list_v2.xml from " << LEGACY_CLIENT_LIST_URL << " with last modifed of " << last_modified << LL_ENDL;
  35.136 -		LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet( LEGACY_CLIENT_LIST_URL, boost::bind( downloadComplete, _1, LEGACY_CLIENT_LIST_URL ), boost::bind( downloadError, _1, LEGACY_CLIENT_LIST_URL ) );
  35.137 +		FSCoreHttpUtil::callbackHttpGet(LEGACY_CLIENT_LIST_URL, last_modified, boost::bind(downloadComplete, _1, LEGACY_CLIENT_LIST_URL), boost::bind(downloadError, _1, LEGACY_CLIENT_LIST_URL));
  35.138  	}
  35.139  	else if(use_legacy_tags)
  35.140  	{
    36.1 --- a/indra/newview/fsdata.h	Wed Nov 29 23:04:31 2017 +0100
    36.2 +++ b/indra/newview/fsdata.h	Wed Nov 29 23:04:58 2017 +0100
    36.3 @@ -79,9 +79,9 @@
    36.4  	std::string getOpenSimMOTD() { return mOpensimMOTD; }
    36.5  	bool getFSDataDone() { return mFSDataDone; }
    36.6  	bool getAgentsDone() { return mAgentsDone; }
    36.7 -	
    36.8 +	void checkDone(const std::string& url);
    36.9 +
   36.10  	bool isAgentFlag(const LLUUID& agent_id, FSData::flags_t flag);
   36.11 -	
   36.12  
   36.13  private:
   36.14  	static void sendInfo(const LLUUID& destination, const LLUUID& sessionid, const std::string& my_name, EInstantMessage dialog);
    37.1 --- a/indra/newview/fsgridhandler.cpp	Wed Nov 29 23:04:31 2017 +0100
    37.2 +++ b/indra/newview/fsgridhandler.cpp	Wed Nov 29 23:04:58 2017 +0100
    37.3 @@ -48,6 +48,7 @@
    37.4  #include "llstartup.h"
    37.5  
    37.6  #include "fscorehttputil.h"
    37.7 +#include "lfsimfeaturehandler.h"	// <COLOSI opensim multi-currency support />
    37.8  
    37.9  void downloadError( LLSD const &aData, LLGridManager* mOwner, GridEntry* mData, LLGridManager::AddState mState )
   37.10  {
   37.11 @@ -1137,6 +1138,13 @@
   37.12  	{
   37.13  		return cmd_line_helper_uri;
   37.14  	}
   37.15 +	// <COLOSI opensim multi-currency support>
   37.16 +	std::string helperUriOverride = LFSimFeatureHandler::getInstance()->helperUriOverride();
   37.17 +	if (!helperUriOverride.empty())
   37.18 +	{
   37.19 +		return helperUriOverride;
   37.20 +	}
   37.21 +	// </COLOSI opensim multi-currency support>>
   37.22  	return mGridList[mGrid][GRID_HELPER_URI_VALUE];
   37.23  }
   37.24  
    38.1 --- a/indra/newview/lfsimfeaturehandler.cpp	Wed Nov 29 23:04:31 2017 +0100
    38.2 +++ b/indra/newview/lfsimfeaturehandler.cpp	Wed Nov 29 23:04:58 2017 +0100
    38.3 @@ -25,6 +25,12 @@
    38.4  #include "llviewernetwork.h"
    38.5  #include "llviewerregion.h"
    38.6  
    38.7 +// <COLOSI opensim multi-currency support>
    38.8 +#include "tea.h"
    38.9 +#include "llstatusbar.h"
   38.10 +#include "llfloaterbuycurrency.h"
   38.11 +// </COLOSI opensim multi-currency support>
   38.12 +
   38.13  LFSimFeatureHandler::LFSimFeatureHandler()
   38.14  	: mSupportsExport(false),
   38.15  	mSayRange(20),
   38.16 @@ -56,17 +62,26 @@
   38.17  {
   38.18  	if (LLViewerRegion* region = gAgent.getRegion())
   38.19  	{
   38.20 -		if (region->capabilitiesReceived())
   38.21 +		if (region->simulatorFeaturesReceived())
   38.22  		{
   38.23  			setSupportedFeatures();
   38.24  		}
   38.25  		else
   38.26  		{
   38.27 -			region->setCapabilitiesReceivedCallback(boost::bind(&LFSimFeatureHandler::setSupportedFeatures, this));
   38.28 +			region->setSimulatorFeaturesReceivedCallback(boost::bind(&LFSimFeatureHandler::onSimulatorFeaturesReceived,this,_1));
   38.29  		}
   38.30  	}
   38.31  }
   38.32  
   38.33 +void LFSimFeatureHandler::onSimulatorFeaturesReceived(const LLUUID &region_id)
   38.34 +{
   38.35 +	LLViewerRegion *region = gAgent.getRegion();
   38.36 +	if (region && (region->getRegionID()==region_id))
   38.37 +	{
   38.38 +		setSupportedFeatures();
   38.39 +	}
   38.40 +}
   38.41 +
   38.42  void LFSimFeatureHandler::setSupportedFeatures()
   38.43  {
   38.44  	if (LLViewerRegion* region = gAgent.getRegion())
   38.45 @@ -150,6 +165,26 @@
   38.46  			{
   38.47  				mAvatarPickerURL = LLStringUtil::null;
   38.48  			}
   38.49 +
   38.50 +			// <COLOSI opensim multi-currency support>
   38.51 +			if (extras.has("currency-base-uri"))
   38.52 +			{
   38.53 +				mHelperUriOverride = extras["currency-base-uri"].asString();
   38.54 +			}
   38.55 +			else
   38.56 +			{
   38.57 +				mHelperUriOverride = LLStringUtil::null;
   38.58 +			}
   38.59 +
   38.60 +			if (extras.has("currency"))
   38.61 +			{
   38.62 +				mCurrencySymbolOverride = extras["currency"].asString();
   38.63 +			}
   38.64 +			else
   38.65 +			{
   38.66 +				mCurrencySymbolOverride = LLStringUtil::null;
   38.67 +			}
   38.68 +			// </COLOSI opensim multi-currency support>
   38.69  		}
   38.70  		else // OpenSim specifics are unsupported reset all to default
   38.71  		{
   38.72 @@ -198,13 +233,44 @@
   38.73  			{
   38.74  				mAvatarPickerURL = LLStringUtil::null;
   38.75  			}
   38.76 +
   38.77 +			// <COLOSI opensim multi-currency support>
   38.78 +			mHelperUriOverride = LLStringUtil::null;
   38.79 +			mCurrencySymbolOverride = LLStringUtil::null;
   38.80 +			// </COLOSI opensim multi-currency support>>
   38.81  		}
   38.82  
   38.83  		mHasAvatarPicker = !avatarPickerURL().empty();
   38.84  		mHasDestinationGuide = !destinationGuideURL().empty();
   38.85 +		
   38.86 +		// <COLOSI opensim multi-currency support>
   38.87 +		std::string prev_currency_symbol = Tea::getCurrency();
   38.88 +		Tea::setRegionCurrency(mCurrencySymbolOverride);
   38.89 +		std::string new_currency_symbol = Tea::getCurrency();
   38.90 +		// If currency symbol has changed, then update things
   38.91 +		if (new_currency_symbol != prev_currency_symbol)
   38.92 +		{
   38.93 +			LFSimFeatureHandler::updateCurrencySymbols();
   38.94 +		}
   38.95 +		// </COLOSI opensim multi-currency support>
   38.96  	}
   38.97  }
   38.98  
   38.99 +// <COLOSI opensim multi-currency support>
  38.100 +//static
  38.101 +void LFSimFeatureHandler::updateCurrencySymbols()
  38.102 +{
  38.103 +	// Update the static ui for the buy_currency_floater xml version; html version may require additional work.
  38.104 +	LLFloaterBuyCurrency::updateCurrencySymbols();
  38.105 +	// Update the necessary compontents of the status bar panel
  38.106 +	if (gStatusBar)
  38.107 +	{
  38.108 +		gStatusBar->updateCurrencySymbols();
  38.109 +	}
  38.110 +	// TODO: What else needs to be updated?
  38.111 +}
  38.112 +// </COLOSI opensim multi-currency support>
  38.113 +
  38.114  boost::signals2::connection LFSimFeatureHandler::setSupportsExportCallback(const boost::signals2::signal<void()>::slot_type& slot)
  38.115  {
  38.116  	return mSupportsExport.connect(slot);
    39.1 --- a/indra/newview/lfsimfeaturehandler.h	Wed Nov 29 23:04:31 2017 +0100
    39.2 +++ b/indra/newview/lfsimfeaturehandler.h	Wed Nov 29 23:04:58 2017 +0100
    39.3 @@ -61,7 +61,19 @@
    39.4  
    39.5  public:
    39.6  	void handleRegionChange();
    39.7 +	void onSimulatorFeaturesReceived(const LLUUID &region_id);
    39.8  	void setSupportedFeatures();
    39.9 +	// <COLOSI opensim multi-currency support>
   39.10 +	// public helper to manage all the manual updates in one place callable from other systems like llstartup.
   39.11 +	// Should be called whenever the sActiveCurrency in Tea is changed, but can't simply be called from Tea
   39.12 +	// because that is an llcommon include and really shouldn't call out to newview system.
   39.13 +	// updating the currency in Tea updates any dynamic LLUIStrings automatically when a param is replaced on the next get call,
   39.14 +	// but static LLUIStrings for floaters/panels/etc pre-loaded are only evaluated once, so these need to be manually updated
   39.15 +	// after we update the currency symbol in Tea.  This function handles that.  As we discover more UI components which we've
   39.16 +	// missed, they can be added to this function.  For now, it primaily handles the status panel (top bar) and the buy currency floater.
   39.17 +	// If there is a better location for this function, we could move it.
   39.18 +	static void updateCurrencySymbols();
   39.19 +	// </COLOSI opensim multi-currency support>
   39.20  
   39.21  	// Connection setters
   39.22  	boost::signals2::connection setSupportsExportCallback(const boost::signals2::signal<void()>::slot_type& slot);
   39.23 @@ -91,6 +103,11 @@
   39.24  	bool hasAvatarPicker() const { return mHasAvatarPicker; }
   39.25  	bool hasDestinationGuide() const { return mHasDestinationGuide; }
   39.26  
   39.27 +	// <COLOSI opensim multi-currency support>
   39.28 +	std::string helperUriOverride() const { return mHelperUriOverride; }
   39.29 +	std::string currencySymbolOverride() const { return mCurrencySymbolOverride; }
   39.30 +	// </COLOSI opensim multi-currency support>
   39.31 +
   39.32  private:
   39.33  	// SignaledTypes
   39.34  	SignaledType<bool> mSupportsExport;
   39.35 @@ -109,6 +126,11 @@
   39.36  
   39.37  	bool mHasAvatarPicker;
   39.38  	bool mHasDestinationGuide;
   39.39 +
   39.40 +	// <COLOSI opensim multi-currency support>
   39.41 +	std::string mHelperUriOverride;
   39.42 +	std::string mCurrencySymbolOverride;
   39.43 +	// </COLOSI opensim multi-currency support>>
   39.44  };
   39.45  
   39.46  #endif //LFSIMFEATUREHANDLER_H
    40.1 --- a/indra/newview/llappcorehttp.h	Wed Nov 29 23:04:31 2017 +0100
    40.2 +++ b/indra/newview/llappcorehttp.h	Wed Nov 29 23:04:58 2017 +0100
    40.3 @@ -61,19 +61,19 @@
    40.4  		/// Pipelined:       no
    40.5  		AP_DEFAULT,
    40.6  
    40.7 -		// <FS:Beq> Avoid stall in texture fetch due to asset fetching. [Drake]
    40.8 -		/// Asset fetching policy class.  Used to
    40.9 -		/// download assets via capability.
   40.10 -		/// Deep queueing of requests.
   40.11 -		/// Do not share.  GET requests only.
   40.12 -		///
   40.13 -		/// Destination:     cdn:80
   40.14 -		/// Protocol:        http:
   40.15 -		/// Transfer size:   KB-MB
   40.16 -		/// Long poll:       no
   40.17 -		/// Concurrency:     high
   40.18 -		/// Request rate:    high
   40.19 -		/// Pipelined:       yes
   40.20 +		// <FS:Beq> Avoid stall in texture fetch due to asset fetching. [Drake]
   40.21 +		/// Asset fetching policy class.  Used to
   40.22 +		/// download assets via capability.
   40.23 +		/// Deep queueing of requests.
   40.24 +		/// Do not share.  GET requests only.
   40.25 +		///
   40.26 +		/// Destination:     cdn:80
   40.27 +		/// Protocol:        http:
   40.28 +		/// Transfer size:   KB-MB
   40.29 +		/// Long poll:       no
   40.30 +		/// Concurrency:     high
   40.31 +		/// Request rate:    high
   40.32 +		/// Pipelined:       yes
   40.33  		AP_ASSET,
   40.34  		// </FS:Beq>
   40.35  
    41.1 --- a/indra/newview/llappviewer.cpp	Wed Nov 29 23:04:31 2017 +0100
    41.2 +++ b/indra/newview/llappviewer.cpp	Wed Nov 29 23:04:58 2017 +0100
    41.3 @@ -933,7 +933,7 @@
    41.4  		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_list_v2.xml"));
    41.5  		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "colors.xml"));
    41.6  		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "ignorable_dialogs.xml"));
    41.7 -		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grids.xml"));
    41.8 +		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grids.remote.xml"));
    41.9  		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grids.user.xml"));
   41.10  		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "password.dat"));
   41.11  		LLFile::remove(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "quick_preferences.xml"));
    42.1 --- a/indra/newview/llbuycurrencyhtml.cpp	Wed Nov 29 23:04:31 2017 +0100
    42.2 +++ b/indra/newview/llbuycurrencyhtml.cpp	Wed Nov 29 23:04:58 2017 +0100
    42.3 @@ -35,6 +35,8 @@
    42.4  #include "llviewercontrol.h"
    42.5  #include "llstatusbar.h"
    42.6  
    42.7 +#include "tea.h"	//<COLOSI opensim multi-currency support />
    42.8 +
    42.9  // support for secondlife:///app/buycurrencyhtml/{ACTION}/{NEXT_ACTION}/{RETURN_CODE} SLapps
   42.10  class LLBuyCurrencyHTMLHandler : 
   42.11  	public LLCommandHandler
   42.12 @@ -132,7 +134,15 @@
   42.13  	if ( buy_currency_floater )
   42.14  	{
   42.15  		// pass on flag indicating if we want to buy specific amount and if so, how much
   42.16 -		buy_currency_floater->setParams( specific_sum_requested, message, sum );
   42.17 +		// <COLOSI opensim multi-currency support>
   42.18 +		//buy_currency_floater->setParams( specific_sum_requested, message, sum );
   42.19 +		// Unclear if html version is used or if message will ever include "L$"..  
   42.20 +		// Message is stored as a std::string, not an LLUIString, in indra/newview/llfloaterbuycurrencyhtml.cpp
   42.21 +		// As long as this is set every time it is displayed, we can just wrap it as below, but if not,
   42.22 +		// then we should convert this to an LLUIString, unwrap it here so it stores with "L$" and
   42.23 +		// update it on retrieval.
   42.24 +		//<COLOSI opensim multi-currency support>
   42.25 +		buy_currency_floater->setParams( specific_sum_requested, Tea::wrapCurrency(message), sum );
   42.26  
   42.27  		// force navigate to new URL
   42.28  		buy_currency_floater->navigateToFinalURL();
    43.1 --- a/indra/newview/llcurrencyuimanager.cpp	Wed Nov 29 23:04:31 2017 +0100
    43.2 +++ b/indra/newview/llcurrencyuimanager.cpp	Wed Nov 29 23:04:58 2017 +0100
    43.3 @@ -279,11 +279,20 @@
    43.4  void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
    43.5  		const char* method, LLXMLRPCValue params)
    43.6  {
    43.7 -	static std::string transactionURI;
    43.8 -	if (transactionURI.empty())
    43.9 -	{
   43.10 -		transactionURI = LLGridManager::getInstance()->getHelperURI() + "currency.php";
   43.11 -	}
   43.12 +	// <COLOSI opensim multi-currency support>
   43.13 +	//static std::string transactionURI;
   43.14 +	//if (transactionURI.empty())
   43.15 +	//{
   43.16 +	//	transactionURI = LLGridManager::getInstance()->getHelperURI() + "currency.php";
   43.17 +	//}
   43.18 +	// Previously, transactionURI was a static local var only set once.  This needs
   43.19 +	// to update on HG teleport or crossing regions to a new currency module.
   43.20 +	// Set every time as this action should be infrequent and efficient.
   43.21 +	// However, we can alternatively make this a static member variable and
   43.22 +	// update it when the currency system changes
   43.23 +	std::string transactionURI;
   43.24 +	transactionURI = LLGridManager::getInstance()->getHelperURI() + "currency.php";
   43.25 +	// </COLOSI opensim multi-currency support>
   43.26  
   43.27  	delete mTransaction;
   43.28  
    44.1 --- a/indra/newview/llexperiencelog.cpp	Wed Nov 29 23:04:31 2017 +0100
    44.2 +++ b/indra/newview/llexperiencelog.cpp	Wed Nov 29 23:04:58 2017 +0100
    44.3 @@ -217,6 +217,7 @@
    44.4  	if(mMaxDays > 0 && settings.has("Events"))
    44.5  	{
    44.6  		mEvents = settings["Events"];
    44.7 +		eraseExpired(); // <FS:Ansariel> FIRE-21781: experience_events.xml log file grows indefinitely
    44.8  		mEventsToSave = mEvents;
    44.9  	}
   44.10  }
   44.11 @@ -228,10 +229,25 @@
   44.12  
   44.13  void LLExperienceLog::eraseExpired()
   44.14  {
   44.15 -	while(mEvents.size() > mMaxDays && mMaxDays > 0)
   44.16 +	// <FS:Ansariel> FIRE-21781: experience_events.xml log file grows indefinitely
   44.17 +	//while(mEvents.size() > mMaxDays && mMaxDays > 0)
   44.18 +	//{
   44.19 +	//	mEvents.erase(mEvents.beginMap()->first);
   44.20 +	//}
   44.21 +	if (mMaxDays > 0)
   44.22  	{
   44.23 -		mEvents.erase(mEvents.beginMap()->first);
   44.24 +		LLSD events = mEvents;
   44.25 +		for (LLSD::map_const_iterator it = mEvents.beginMap(); it != mEvents.endMap(); ++it)
   44.26 +		{
   44.27 +			std::string date = it->first;
   44.28 +			if (!isNotExpired(date))
   44.29 +			{
   44.30 +				events.erase(it->first);
   44.31 +			}
   44.32 +		}
   44.33 +		mEvents = events;
   44.34  	}
   44.35 +	// </FS:Ansariel>
   44.36  }
   44.37  
   44.38  bool LLExperienceLog::isNotExpired(std::string& date)
    45.1 --- a/indra/newview/llfeaturemanager.cpp	Wed Nov 29 23:04:31 2017 +0100
    45.2 +++ b/indra/newview/llfeaturemanager.cpp	Wed Nov 29 23:04:58 2017 +0100
    45.3 @@ -498,22 +498,24 @@
    45.4  
    45.5      const std::string base = gSavedSettings.getString("FeatureManagerHTTPTable");
    45.6  
    45.7 -
    45.8 -#if LL_WINDOWS
    45.9 -    std::string os_string = LLOSInfo::instance().getOSStringSimple();
   45.10 -    std::string filename;
   45.11 -
   45.12 -    if (os_string.find("Microsoft Windows XP") == 0)
   45.13 -    {
   45.14 -        filename = llformat(tableName.c_str(), "_xp", LLVersionInfo::getVersion().c_str());
   45.15 -    }
   45.16 -    else
   45.17 -    {
   45.18 -        filename = llformat(tableName.c_str(), "", LLVersionInfo::getVersion().c_str());
   45.19 -    }
   45.20 -#else
   45.21 -    const std::string filename   = llformat(tableName.c_str(), LLVersionInfo::getVersion().c_str());
   45.22 -#endif
   45.23 +    // <FS:Ansariel> Re-enable feature table download
   45.24 +//#if LL_WINDOWS
   45.25 +//    std::string os_string = LLOSInfo::instance().getOSStringSimple();
   45.26 +//    std::string filename;
   45.27 +//
   45.28 +//    if (os_string.find("Microsoft Windows XP") == 0)
   45.29 +//    {
   45.30 +//        filename = llformat(tableName.c_str(), "_xp", LLVersionInfo::getVersion().c_str());
   45.31 +//    }
   45.32 +//    else
   45.33 +//    {
   45.34 +//        filename = llformat(tableName.c_str(), "", LLVersionInfo::getVersion().c_str());
   45.35 +//    }
   45.36 +//#else
   45.37 +//    const std::string filename   = llformat(tableName.c_str(), LLVersionInfo::getVersion().c_str());
   45.38 +//#endif
   45.39 +    const std::string filename   = llformat(tableName.c_str(), LLVersionInfo::getShortVersion().c_str());
   45.40 +    // </FS:Ansariel>
   45.41  
   45.42      std::string url        = base + "/" + filename;
   45.43      // testing url below
   45.44 @@ -521,14 +523,30 @@
   45.45      const std::string path       = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename);
   45.46  
   45.47  
   45.48 -    LL_INFOS() << "LLFeatureManager fetching " << url << " into " << path << LL_ENDL;
   45.49 +    // <FS:Ansariel> Re-enable feature table download
   45.50 +    //LL_INFOS() << "LLFeatureManager fetching " << url << " into " << path << LL_ENDL;
   45.51  
   45.52 -    LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url);
   45.53 +    //LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url);
   45.54 +    time_t last_modified = 0;
   45.55 +    llstat stat_data;
   45.56 +    if(!LLFile::stat(path, &stat_data))
   45.57 +    {
   45.58 +        last_modified = stat_data.st_mtime;
   45.59 +    }
   45.60 +    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
   45.61 +    httpOpts->setWantHeaders(true);
   45.62 +    httpOpts->setLastModified((long)last_modified);
   45.63 +    LL_INFOS() << "LLFeatureManager fetching " << url << " with last modifed of " << last_modified << " into " << path << LL_ENDL;
   45.64 +    LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url, httpOpts);
   45.65 +    // </FS:Ansariel>
   45.66  
   45.67      LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
   45.68      LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
   45.69  
   45.70 -    if (status)
   45.71 +    // <FS:Ansariel> Re-enable feature table download
   45.72 +    //if (status)
   45.73 +    if (status == LLCore::HttpStatus(HTTP_OK))
   45.74 +    // </FS:Ansariel>
   45.75      {   // There was a newer feature table on the server. We've grabbed it and now should write it.
   45.76          // write to file
   45.77          const LLSD::Binary &raw = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_RAW].asBinary();
    46.1 --- a/indra/newview/llfloaterbuycurrency.cpp	Wed Nov 29 23:04:31 2017 +0100
    46.2 +++ b/indra/newview/llfloaterbuycurrency.cpp	Wed Nov 29 23:04:58 2017 +0100
    46.3 @@ -265,6 +265,11 @@
    46.4  
    46.5  void LLFloaterBuyCurrencyUI::onClickBuy()
    46.6  {
    46.7 +	// <COLOSI opensim multi-currency support>
    46.8 +	// Do not wrap the "buy_currency" string because it is the mOrig later stored
    46.9 +	// in an LLUIString with params and will be wrapped when params are inserted.
   46.10 +	// wrapping here would break multi-currency support as it would remove the L$
   46.11 +	//</COLOSI opensim multi-currency support>>
   46.12  	mManager.buy(getString("buy_currency"));
   46.13  	updateUI();
   46.14  	// Update L$ balance
   46.15 @@ -298,8 +303,37 @@
   46.16  void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)
   46.17  {
   46.18  	LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency");
   46.19 +	// <COLOSI opensim multi-currency support>
   46.20 +	// Not wrapping name here because according to llfloaterbuycurrency.h
   46.21 +	// name should not include currency symbols as the price will be appended to the string.
   46.22 +	// If an "L$" is ever included in a name, then we should call Tea::wrapCurrency on it here.
   46.23 +	// </COLOSI opensim multi-currency support>>
   46.24  	ui->target(name, price);
   46.25  	ui->updateUI();
   46.26  }
   46.27  
   46.28 +// <COLOSI opensim multi-currency support>
   46.29 +// static
   46.30 +void LLFloaterBuyCurrency::updateCurrencySymbols()
   46.31 +{
   46.32 +	LLFloater* fbc = LLFloaterReg::findInstance("buy_currency");
   46.33 +	if (fbc)
   46.34 +	{
   46.35 +		// Call update on the floater to update the title
   46.36 +		fbc->updateCurrencySymbols();
   46.37  
   46.38 +		// update all text boxes with currency symbols.
   46.39 +		LLTextBox* tb = NULL;
   46.40 +		static const std::list<std::string> sctb = { "info_need_more", "info_buying", "currency_label", "purchase_warning_repurchase", "purchase_warning_notenough" };
   46.41 +		// Do not include balance_amount and total_amount because they are updated on every display when amounts are replaced.
   46.42 +		for (std::list<std::string>::const_iterator iter = sctb.begin(); iter != sctb.end(); ++iter)
   46.43 +		{
   46.44 +			tb = fbc->findChild<LLTextBox>(*iter);
   46.45 +			if (tb)
   46.46 +			{
   46.47 +				tb->updateCurrencySymbols();
   46.48 +			}
   46.49 +		}
   46.50 +	}
   46.51 +}
   46.52 +// </COLOSI opensim multi-currency support>
    47.1 --- a/indra/newview/llfloaterbuycurrency.h	Wed Nov 29 23:04:31 2017 +0100
    47.2 +++ b/indra/newview/llfloaterbuycurrency.h	Wed Nov 29 23:04:58 2017 +0100
    47.3 @@ -44,6 +44,12 @@
    47.4  		*/
    47.5  	
    47.6  	static LLFloater* buildFloater(const LLSD& key);
    47.7 +
    47.8 +	// <COLOSI opensim multi-currency support>
    47.9 +	// Necessary because floater was designed to build only on first display.
   47.10 +	// Forces refresh of all currency symbols in floater when called.
   47.11 +	static void updateCurrencySymbols();
   47.12 +	// </COLOSI opensim multi-currency support>
   47.13  };
   47.14  
   47.15  
    48.1 --- a/indra/newview/llfloaterbuyland.cpp	Wed Nov 29 23:04:31 2017 +0100
    48.2 +++ b/indra/newview/llfloaterbuyland.cpp	Wed Nov 29 23:04:58 2017 +0100
    48.3 @@ -858,11 +858,20 @@
    48.4  	mTransactionType = type;
    48.5  
    48.6  	// Select a URI and method appropriate for the transaction type.
    48.7 -	static std::string transaction_uri;
    48.8 -	if (transaction_uri.empty())
    48.9 -	{
   48.10 -		transaction_uri = LLGridManager::getInstance()->getHelperURI() + "landtool.php";
   48.11 -	}
   48.12 +	// <COLOSI  opensim multi-currency support>
   48.13 +	//static std::string transaction_uri;
   48.14 +	//if (transaction_uri.empty())
   48.15 +	//{
   48.16 +	//	transaction_uri = LLGridManager::getInstance()->getHelperURI() + "landtool.php";
   48.17 +	//}
   48.18 +	// Previously, transaction_uri was a static local var only set once.  This needs
   48.19 +	// to update on HG teleport or crossing regions to a new currency module.
   48.20 +	// Set every time as this action should be infrequent and efficient.
   48.21 +	// However, we can alternatively make this a static member variable and
   48.22 +	// update it when the currency system changes
   48.23 +	std::string transaction_uri;
   48.24 +	transaction_uri = LLGridManager::getInstance()->getHelperURI() + "landtool.php";
   48.25 +	// </COLOSI opensim multi-currency support>
   48.26  	
   48.27  	const char* method;
   48.28  	switch (mTransactionType)
    49.1 --- a/indra/newview/llfloatergesture.cpp	Wed Nov 29 23:04:31 2017 +0100
    49.2 +++ b/indra/newview/llfloatergesture.cpp	Wed Nov 29 23:04:58 2017 +0100
    49.3 @@ -279,12 +279,14 @@
    49.4  	getSelectedIds(selected_items);
    49.5  	LL_DEBUGS("Gesture")<< "Rebuilding gesture list "<< LL_ENDL;
    49.6  //	mGestureList->deleteAllItems(); // <FS:ND/> Don't recreate the list over and over.
    49.7 +	uuid_set_t added_items; // <FS:Ansariel> FIRE-5939: Deleted gestures not removed from gestures floater
    49.8  
    49.9  	LLGestureMgr::item_map_t::const_iterator it;
   49.10  	const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures();
   49.11  	for (it = active_gestures.begin(); it != active_gestures.end(); ++it)
   49.12  	{
   49.13  		addGesture(it->first,it->second, mGestureList);
   49.14 +		added_items.insert(it->first); // <FS:Ansariel> FIRE-5939: Deleted gestures not removed from gestures floater
   49.15  	}
   49.16  	// <FS:PP> FIRE-5646: Option to show only active gestures
   49.17  	// if (gInventory.isCategoryComplete(mGestureFolderID))
   49.18 @@ -304,10 +306,27 @@
   49.19  			{
   49.20  				// if gesture wasn't loaded yet, we can display only name
   49.21  				addGesture(item->getUUID(), NULL, mGestureList);
   49.22 +				added_items.insert(item->getUUID()); // <FS:Ansariel> FIRE-5939: Deleted gestures not removed from gestures floater
   49.23  			}
   49.24  		}
   49.25  	}
   49.26  
   49.27 +	// <FS:Ansariel> FIRE-5939: Deleted gestures not removed from gestures floater
   49.28 +	std::map<LLUUID, LLScrollListItem*> new_items;
   49.29 +	for (std::map<LLUUID, LLScrollListItem*>::iterator iit = mItems.begin(); iit != mItems.end(); ++iit)
   49.30 +	{
   49.31 +		if (added_items.find(iit->first) == added_items.end())
   49.32 +		{
   49.33 +			mGestureList->deleteItems(iit->first);
   49.34 +		}
   49.35 +		else
   49.36 +		{
   49.37 +			new_items[iit->first] = iit->second;
   49.38 +		}
   49.39 +	}
   49.40 +	mItems = new_items;
   49.41 +	// </FS:Ansariel>
   49.42 +
   49.43  	// attempt to preserve scroll position through re-builds
   49.44  	// since we do re-build whenever something gets dirty
   49.45  	for(uuid_vec_t::iterator it = selected_items.begin(); it != selected_items.end(); it++)
    50.1 --- a/indra/newview/llfloaterinspect.cpp	Wed Nov 29 23:04:31 2017 +0100
    50.2 +++ b/indra/newview/llfloaterinspect.cpp	Wed Nov 29 23:04:58 2017 +0100
    50.3 @@ -47,6 +47,12 @@
    50.4  #include "rlvcommon.h"
    50.5  #include "rlvui.h"
    50.6  // [/RLVa:KB]
    50.7 +// PoundLife - Improved Object Inspect
    50.8 +#include "llresmgr.h"
    50.9 +#include "lltexturectrl.h"
   50.10 +#include "llviewerobjectlist.h" //gObjectList
   50.11 +#include "llviewertexturelist.h"
   50.12 +// PoundLife END
   50.13  
   50.14  //LLFloaterInspect* LLFloaterInspect::sInstance = NULL;
   50.15  
   50.16 @@ -282,6 +288,20 @@
   50.17  	LLUUID creator_id;
   50.18  	std::string creator_name;
   50.19  	S32 pos = mObjectList->getScrollPos();
   50.20 +	// PoundLife - Improved Object Inspect
   50.21 +	LLLocale locale("");
   50.22 +	LLResMgr& res_mgr = LLResMgr::instance();
   50.23 +	LLSelectMgr& sel_mgr = LLSelectMgr::instance();
   50.24 +	S32 fcount = 0;
   50.25 +	S32 tcount = 0;
   50.26 +	S32 vcount = 0;
   50.27 +	S32 objcount = 0;
   50.28 +	S32 primcount = 0;
   50.29 +	mTextureList.clear();
   50.30 +	mTextureMemory = 0;
   50.31 +	mTextureVRAMMemory = 0;
   50.32 +	std::string format_res_string;
   50.33 +	// PoundLife - End
   50.34  	getChildView("button owner")->setEnabled(false);
   50.35  	getChildView("button creator")->setEnabled(false);
   50.36  	LLUUID selected_uuid;
   50.37 @@ -415,6 +435,42 @@
   50.38  		row["columns"][5]["type"] = "text";
   50.39  		row["columns"][5]["value"] = llformat("%d", timestamp);
   50.40  		// </FS:Ansariel>
   50.41 +		// PoundLife - Improved Object Inspect
   50.42 +		res_mgr.getIntegerString(format_res_string, obj->getObject()->getNumFaces());
   50.43 +		row["columns"][6]["column"] = "facecount";
   50.44 +		row["columns"][6]["type"] = "text";
   50.45 +		row["columns"][6]["value"] = format_res_string;
   50.46 +
   50.47 +		res_mgr.getIntegerString(format_res_string, obj->getObject()->getNumVertices());
   50.48 +		row["columns"][7]["column"] = "vertexcount";
   50.49 +		row["columns"][7]["type"] = "text";
   50.50 +		row["columns"][7]["value"] = format_res_string;
   50.51 +
   50.52 +		res_mgr.getIntegerString(format_res_string, obj->getObject()->getNumIndices() / 3);
   50.53 +		row["columns"][8]["column"] = "trianglecount";
   50.54 +		row["columns"][8]["type"] = "text";
   50.55 +		row["columns"][8]["value"] = format_res_string;
   50.56 +
   50.57 +		// Poundlife - Get VRAM
   50.58 +		U32 texture_memory = 0;
   50.59 +		U32 vram_memory = 0;
   50.60 +		getObjectTextureMemory(obj->getObject(), texture_memory, vram_memory);
   50.61 +		res_mgr.getIntegerString(format_res_string, texture_memory / 1024);
   50.62 +		row["columns"][9]["column"] = "tramcount";
   50.63 +		row["columns"][9]["type"] = "text";
   50.64 +		row["columns"][9]["value"] = format_res_string;
   50.65 +
   50.66 +		res_mgr.getIntegerString(format_res_string, vram_memory / 1024);
   50.67 +		row["columns"][10]["column"] = "vramcount";
   50.68 +		row["columns"][10]["type"] = "text";
   50.69 +		row["columns"][10]["value"] = format_res_string;
   50.70 +
   50.71 +		primcount = sel_mgr.getSelection()->getObjectCount();
   50.72 +		objcount = sel_mgr.getSelection()->getRootObjectCount();
   50.73 +		fcount += obj->getObject()->getNumFaces();
   50.74 +		tcount += obj->getObject()->getNumIndices() / 3;
   50.75 +		vcount += obj->getObject()->getNumVertices();
   50.76 +		// PoundLife - END
   50.77  		mObjectList->addElement(row, ADD_TOP);
   50.78  	}
   50.79  	if(selected_index > -1 && mObjectList->getItemIndex(selected_uuid) == selected_index)
   50.80 @@ -427,8 +483,109 @@
   50.81  	}
   50.82  	onSelectObject();
   50.83  	mObjectList->setScrollPos(pos);
   50.84 +	// PoundLife - Total linkset stats.
   50.85 +	LLStringUtil::format_map_t args;
   50.86 +	res_mgr.getIntegerString(format_res_string, objcount);
   50.87 +	args["NUM_OBJECTS"] = format_res_string;
   50.88 +	res_mgr.getIntegerString(format_res_string, primcount);
   50.89 +	args["NUM_PRIMS"] = format_res_string;
   50.90 +	res_mgr.getIntegerString(format_res_string, fcount);
   50.91 +	args["NUM_FACES"] = format_res_string;
   50.92 +	res_mgr.getIntegerString(format_res_string, vcount);
   50.93 +	args["NUM_VERTICES"] = format_res_string;
   50.94 +	res_mgr.getIntegerString(format_res_string, tcount);
   50.95 +	args["NUM_TRIANGLES"] = format_res_string;
   50.96 +	res_mgr.getIntegerString(format_res_string, mTextureList.size());
   50.97 +	args["NUM_TEXTURES"] = format_res_string;
   50.98 +	res_mgr.getIntegerString(format_res_string, mTextureMemory / 1024);
   50.99 +	args["TEXTURE_MEMORY"] = format_res_string;
  50.100 +	res_mgr.getIntegerString(format_res_string, mTextureVRAMMemory / 1024);
  50.101 +	args["VRAM_USAGE"] = format_res_string;
  50.102 +	getChild<LLTextBase>("linksetstats_text")->setText(getString("stats_list", args));
  50.103 +	// PoundLife - End
  50.104  }
  50.105  
  50.106 +// PoundLife - Improved Object Inspect
  50.107 +void LLFloaterInspect::getObjectTextureMemory(LLViewerObject* object, U32& object_texture_memory, U32& object_vram_memory)
  50.108 +{
  50.109 +	uuid_vec_t object_texture_list;
  50.110 +
  50.111 +	if (!object)
  50.112 +	{
  50.113 +		return;
  50.114 +	}
  50.115 +
  50.116 +	LLUUID uuid;
  50.117 +	U8 te_count = object->getNumTEs();
  50.118 +
  50.119 +	for (U8 j = 0; j < te_count; j++)
  50.120 +	{
  50.121 +		LLViewerTexture* img = object->getTEImage(j);
  50.122 +		if (img)
  50.123 +		{
  50.124 +			calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory);
  50.125 +		}
  50.126 +
  50.127 +		// materials per face
  50.128 +		if (object->getTE(j)->getMaterialParams().notNull())
  50.129 +		{
  50.130 +			uuid = object->getTE(j)->getMaterialParams()->getNormalID();
  50.131 +			if (uuid.notNull())
  50.132 +			{
  50.133 +				LLViewerTexture* img = gTextureList.getImage(uuid);
  50.134 +				if (img)
  50.135 +				{
  50.136 +					calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory);
  50.137 +				}
  50.138 +			}
  50.139 +
  50.140 +			uuid = object->getTE(j)->getMaterialParams()->getSpecularID();
  50.141 +			if (uuid.notNull())
  50.142 +			{
  50.143 +				LLViewerTexture* img = gTextureList.getImage(uuid);
  50.144 +				if (img)
  50.145 +				{
  50.146 +					calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory);
  50.147 +				}
  50.148 +			}
  50.149 +		}
  50.150 +	}
  50.151 +
  50.152 +	// sculpt map
  50.153 +	if (object->isSculpted() && !object->isMesh())
  50.154 +	{
  50.155 +		LLSculptParams *sculpt_params = (LLSculptParams *)(object->getParameterEntry(LLNetworkData::PARAMS_SCULPT));
  50.156 +		uuid = sculpt_params->getSculptTexture();
  50.157 +		LLViewerTexture* img = gTextureList.getImage(uuid);
  50.158 +		if (img)
  50.159 +		{
  50.160 +			calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory);
  50.161 +		}
  50.162 +	}
  50.163 +}
  50.164 +
  50.165 +void LLFloaterInspect::calculateTextureMemory(LLViewerTexture* texture, uuid_vec_t& object_texture_list, U32& object_texture_memory, U32& object_vram_memory)
  50.166 +{
  50.167 +	const LLUUID uuid = texture->getID();
  50.168 +	U32 vram_memory = (texture->getFullHeight() * texture->getFullWidth() * 32 / 8);
  50.169 +	U32 texture_memory = (texture->getFullHeight() * texture->getFullWidth() * texture->getComponents());
  50.170 +
  50.171 +	if (std::find(mTextureList.begin(), mTextureList.end(), uuid) == mTextureList.end())
  50.172 +	{
  50.173 +		mTextureList.push_back(uuid);
  50.174 +		mTextureMemory += texture_memory;
  50.175 +		mTextureVRAMMemory += vram_memory;
  50.176 +	}
  50.177 +
  50.178 +	if (std::find(object_texture_list.begin(), object_texture_list.end(), uuid) == object_texture_list.end())
  50.179 +	{
  50.180 +		object_texture_list.push_back(uuid);
  50.181 +		object_texture_memory += texture_memory;
  50.182 +		object_vram_memory += vram_memory;
  50.183 +	}
  50.184 +}
  50.185 +// PoundLife - End
  50.186 +
  50.187  void LLFloaterInspect::onFocusReceived()
  50.188  {
  50.189  	LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance());
    51.1 --- a/indra/newview/llfloaterinspect.h	Wed Nov 29 23:04:31 2017 +0100
    51.2 +++ b/indra/newview/llfloaterinspect.h	Wed Nov 29 23:04:58 2017 +0100
    51.3 @@ -31,6 +31,7 @@
    51.4  
    51.5  #include "llavatarname.h"
    51.6  #include "llfloater.h"
    51.7 +#include "llviewerobject.h" // PoundLife - Improved Object Inspect
    51.8  
    51.9  //class LLTool;
   51.10  class LLObjectSelection;
   51.11 @@ -57,7 +58,9 @@
   51.12  	void onClickCreatorProfile();
   51.13  	void onClickOwnerProfile();
   51.14  	void onSelectObject();
   51.15 -
   51.16 +	// PoundLife - Improved Object Inspect
   51.17 +	U64 mStatsMemoryTotal;
   51.18 +	// PoundLife - End
   51.19  	LLScrollListCtrl* mObjectList;
   51.20  protected:
   51.21  	// protected members
   51.22 @@ -69,6 +72,13 @@
   51.23  // [/RLVa:KB]
   51.24  
   51.25  private:
   51.26 +	// PoundLife - Improved Object Inspect
   51.27 +	void getObjectTextureMemory(LLViewerObject* object, U32& object_texture_memory, U32& object_vram_memory);
   51.28 +	void calculateTextureMemory(LLViewerTexture* texture, uuid_vec_t& object_texture_list, U32& object_texture_memory, U32& object_vram_memory);
   51.29 +	uuid_vec_t mTextureList;
   51.30 +	U32 mTextureMemory;
   51.31 +	U32 mTextureVRAMMemory;
   51.32 +	// PoundLife - End
   51.33  	void onGetOwnerNameCallback();
   51.34  	void onGetCreatorNameCallback();
   51.35  	
    52.1 --- a/indra/newview/llfloaterpreference.cpp	Wed Nov 29 23:04:31 2017 +0100
    52.2 +++ b/indra/newview/llfloaterpreference.cpp	Wed Nov 29 23:04:58 2017 +0100
    52.3 @@ -2120,7 +2120,6 @@
    52.4  	BOOL shaders = ctrl_shader_enable->get();
    52.5  	if (shaders)
    52.6  	{
    52.7 -		terrain_detail->setValue(1);
    52.8  		terrain_detail->setEnabled(FALSE);
    52.9  	}
   52.10  	else
    53.1 --- a/indra/newview/llfloatertools.cpp	Wed Nov 29 23:04:31 2017 +0100
    53.2 +++ b/indra/newview/llfloatertools.cpp	Wed Nov 29 23:04:58 2017 +0100
    53.3 @@ -126,9 +126,6 @@
    53.4  void commit_grid_mode(LLUICtrl *);
    53.5  void commit_slider_zoom(LLUICtrl *ctrl);
    53.6  
    53.7 -// <FS:KC> show/hide build highlight
    53.8 -void commit_show_highlight(void *ctrl);
    53.9 -
   53.10  /**
   53.11   * Class LLLandImpactsObserver
   53.12   *
   53.13 @@ -271,13 +268,9 @@
   53.14  
   53.15  	// <FS:KC> show highlight
   53.16  	mCheckShowHighlight = getChild<LLCheckBoxCtrl>("checkbox show highlight");
   53.17 -	mCheckShowHighlight->setValue(gSavedSettings.getBOOL("RenderHighlightSelections"));
   53.18 -	LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL);
   53.19 -
   53.20  	mCheckActualRoot = getChild<LLCheckBoxCtrl>("checkbox actual root");
   53.21  	// </FS:KC>
   53.22  
   53.23 -
   53.24  	//
   53.25  	// Create Buttons
   53.26  	//
   53.27 @@ -483,9 +476,6 @@
   53.28  	// <FS:Ansariel> FIRE-7802: Grass and tree selection in build tool
   53.29  	mCommitCallbackRegistrar.add("BuildTool.TreeGrass",			boost::bind(&LLFloaterTools::onSelectTreeGrassCombo, this));
   53.30  
   53.31 -	// <FS:KC> show/hide build highlight
   53.32 -	mCommitCallbackRegistrar.add("BuildTool.commitShowHighlight",	boost::bind(&commit_show_highlight, this));
   53.33 -
   53.34  	mLandImpactsObserver = new LLLandImpactsObserver();
   53.35  	LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
   53.36  }
   53.37 @@ -1080,15 +1070,6 @@
   53.38  {
   53.39  	mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
   53.40  	mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
   53.41 -	
   53.42 -	// <FS:KC> Set the check box value from the saved setting
   53.43 -	// this function runs on selection change
   53.44 -	if (!mOpen)
   53.45 -	{
   53.46 -		mOpen = TRUE;
   53.47 -		mCheckShowHighlight->setValue(gSavedSettings.getBOOL("RenderHighlightSelections"));
   53.48 -	}
   53.49 -	// </FS:KC>
   53.50  
   53.51  	std::string panel = key.asString();
   53.52  	if (!panel.empty())
   53.53 @@ -1118,12 +1099,6 @@
   53.54  	LLSelectMgr::getInstance()->promoteSelectionToRoot();
   53.55  	gSavedSettings.setBOOL("EditLinkedParts", FALSE);
   53.56  
   53.57 -	// <FS:KC>
   53.58 -	LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL);
   53.59 -
   53.60 -	mOpen = FALSE; //hack cause onOpen runs on every selection change but onClose doesnt.
   53.61 -	// </FS:KC>
   53.62 -
   53.63  	gViewerWindow->showCursor();
   53.64  
   53.65  	resetToolState();
   53.66 @@ -1320,23 +1295,6 @@
   53.67  	}
   53.68  }
   53.69  
   53.70 -// <FS:KC> show/hide build highlight
   53.71 -void commit_show_highlight(void *data)
   53.72 -{
   53.73 -	LLFloaterTools* floaterp = (LLFloaterTools*)data;
   53.74 -	BOOL show_highlight = floaterp->mCheckShowHighlight->get();
   53.75 -	if (show_highlight)
   53.76 -	{
   53.77 -		LLSelectMgr::getInstance()->setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_SHOW);
   53.78 -	}
   53.79 -	else
   53.80 -	{
   53.81 -		LLSelectMgr::getInstance()->setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_HIDE);
   53.82 -	}
   53.83 -}
   53.84 -// </FS:KC>
   53.85 -
   53.86 -
   53.87  // static 
   53.88  void LLFloaterTools::setObjectType( LLPCode pcode )
   53.89  {
    54.1 --- a/indra/newview/llfloatertools.h	Wed Nov 29 23:04:31 2017 +0100
    54.2 +++ b/indra/newview/llfloatertools.h	Wed Nov 29 23:04:58 2017 +0100
    54.3 @@ -224,14 +224,12 @@
    54.4  private:
    54.5  	BOOL					mDirty;
    54.6  	BOOL                    mHasSelection;
    54.7 -	BOOL					mOpen; //Phoenix:KC
    54.8  
    54.9  	//Phoenix:KC
   54.10  	S32					mCollapsedHeight;
   54.11  	S32					mExpandedHeight;
   54.12  	std::map<std::string, std::string> mStatusText;
   54.13  
   54.14 -
   54.15  protected:
   54.16  	LLSD				mMediaSettings;
   54.17  
    55.1 --- a/indra/newview/llinspectgroup.cpp	Wed Nov 29 23:04:31 2017 +0100
    55.2 +++ b/indra/newview/llinspectgroup.cpp	Wed Nov 29 23:04:58 2017 +0100
    55.3 @@ -205,7 +205,7 @@
    55.4  {
    55.5  	if (id == mGroupID)
    55.6  	{
    55.7 -		getChild<LLUICtrl>("group_name")->setValue( LLSD(name) );
    55.8 +		getChild<LLUICtrl>("group_name")->setValue(LLSD("<nolink>" + name + "</nolink>"));
    55.9  	}
   55.10  	
   55.11  	// Otherwise possibly a request for an older inspector, ignore it
    56.1 --- a/indra/newview/llinventorybridge.cpp	Wed Nov 29 23:04:31 2017 +0100
    56.2 +++ b/indra/newview/llinventorybridge.cpp	Wed Nov 29 23:04:58 2017 +0100
    56.3 @@ -6471,6 +6471,15 @@
    56.4  		getClipboardEntries(true, items, disabled_items, flags);
    56.5  
    56.6  		items.push_back(std::string("Gesture Separator"));
    56.7 +		// <FS:Ansariel> FIRE-5913: Selecting a mix of active and inactive gestures disables both "Activate" / "Deactivate" menu options
    56.8 +		if (flags & ITEM_IN_MULTI_SELECTION)
    56.9 +		{
   56.10 +			items.push_back(std::string("Deactivate"));
   56.11 +			items.push_back(std::string("Activate"));
   56.12 +		}
   56.13 +		else
   56.14 +		{
   56.15 +		// </FS:Ansariel>
   56.16  		if (LLGestureMgr::instance().isGestureActive(getUUID()))
   56.17  		{
   56.18  			items.push_back(std::string("Deactivate"));
   56.19 @@ -6479,6 +6488,9 @@
   56.20  		{
   56.21  			items.push_back(std::string("Activate"));
   56.22  		}
   56.23 +		// <FS:Ansariel> FIRE-5913: Selecting a mix of active and inactive gestures disables both "Activate" / "Deactivate" menu options
   56.24 +		}
   56.25 +		// </FS:Ansariel>
   56.26  	}
   56.27  	addLinkReplaceMenuOption(items, disabled_items);
   56.28  
    57.1 --- a/indra/newview/llinventoryfunctions.cpp	Wed Nov 29 23:04:31 2017 +0100
    57.2 +++ b/indra/newview/llinventoryfunctions.cpp	Wed Nov 29 23:04:58 2017 +0100
    57.3 @@ -854,7 +854,6 @@
    57.4  	main_inventory->showAllItemsPanel();
    57.5  	main_inventory->resetFilters();
    57.6  	main_inventory->onFilterEdit("");
    57.7 -	main_inventory->getActivePanel()->setFilterLinks(LLInventoryFilter::FILTERLINK_INCLUDE_LINKS);
    57.8  	main_inventory->getActivePanel()->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_YES);
    57.9  	// </FS:Ansariel>
   57.10  }
    58.1 --- a/indra/newview/llmeshrepository.cpp	Wed Nov 29 23:04:31 2017 +0100
    58.2 +++ b/indra/newview/llmeshrepository.cpp	Wed Nov 29 23:04:58 2017 +0100
    58.3 @@ -3011,9 +3011,12 @@
    58.4  			// handler, optional first that takes a body, fallback second
    58.5  			// that requires a temporary allocation and data copy.
    58.6  			body_offset = mOffset - offset;
    58.7 -			data = new U8[data_size - body_offset];
    58.8 -			body->read(body_offset, (char *) data, data_size - body_offset);
    58.9 -			LLMeshRepository::sBytesReceived += data_size;
   58.10 +			data = new(std::nothrow) U8[data_size - body_offset];
   58.11 +			if (data)
   58.12 +			{
   58.13 +				body->read(body_offset, (char *) data, data_size - body_offset);
   58.14 +				LLMeshRepository::sBytesReceived += data_size;
   58.15 +			}
   58.16  		}
   58.17  
   58.18  		processData(body, body_offset, data, data_size - body_offset);
   58.19 @@ -3062,7 +3065,9 @@
   58.20  									  U8 * data, S32 data_size)
   58.21  {
   58.22  	LLUUID mesh_id = mMeshParams.getSculptID();
   58.23 -	bool success = (! MESH_HEADER_PROCESS_FAILED) && gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size);
   58.24 +	bool success = (! MESH_HEADER_PROCESS_FAILED)
   58.25 +		&& ((data != NULL) == (data_size > 0)) // if we have data but no size or have size but no data, something is wrong
   58.26 +		&& gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size);
   58.27  	llassert(success);
   58.28  	if (! success)
   58.29  	{
   58.30 @@ -3189,7 +3194,9 @@
   58.31  void LLMeshLODHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
   58.32  								   U8 * data, S32 data_size)
   58.33  {
   58.34 -	if ((! MESH_LOD_PROCESS_FAILED) && gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size))
   58.35 +	if ((!MESH_LOD_PROCESS_FAILED)
   58.36 +		&& ((data != NULL) == (data_size > 0)) // if we have data but no size or have size but no data, something is wrong
   58.37 +		&& gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size))
   58.38  	{
   58.39  		// good fetch from sim, write to VFS for caching
   58.40  		LLVFile file(gVFS, mMeshParams.getSculptID(), LLAssetType::AT_MESH, LLVFile::WRITE);
   58.41 @@ -3237,7 +3244,9 @@
   58.42  void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
   58.43  										U8 * data, S32 data_size)
   58.44  {
   58.45 -	if ((! MESH_SKIN_INFO_PROCESS_FAILED) && gMeshRepo.mThread->skinInfoReceived(mMeshID, data, data_size))
   58.46 +	if ((!MESH_SKIN_INFO_PROCESS_FAILED)
   58.47 +		&& ((data != NULL) == (data_size > 0)) // if we have data but no size or have size but no data, something is wrong
   58.48 +		&& gMeshRepo.mThread->skinInfoReceived(mMeshID, data, data_size))
   58.49  	{
   58.50  		// good fetch from sim, write to VFS for caching
   58.51  		LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE);
   58.52 @@ -3283,7 +3292,9 @@
   58.53  void LLMeshDecompositionHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
   58.54  											 U8 * data, S32 data_size)
   58.55  {
   58.56 -	if ((! MESH_DECOMP_PROCESS_FAILED) && gMeshRepo.mThread->decompositionReceived(mMeshID, data, data_size))
   58.57 +	if ((!MESH_DECOMP_PROCESS_FAILED)
   58.58 +		&& ((data != NULL) == (data_size > 0)) // if we have data but no size or have size but no data, something is wrong
   58.59 +		&& gMeshRepo.mThread->decompositionReceived(mMeshID, data, data_size))
   58.60  	{
   58.61  		// good fetch from sim, write to VFS for caching
   58.62  		LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE);
   58.63 @@ -3328,7 +3339,9 @@
   58.64  void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */,
   58.65  											U8 * data, S32 data_size)
   58.66  {
   58.67 -	if ((! MESH_PHYS_SHAPE_PROCESS_FAILED) && gMeshRepo.mThread->physicsShapeReceived(mMeshID, data, data_size))
   58.68 +	if ((!MESH_PHYS_SHAPE_PROCESS_FAILED)
   58.69 +		&& ((data != NULL) == (data_size > 0)) // if we have data but no size or have size but no data, something is wrong
   58.70 +		&& gMeshRepo.mThread->physicsShapeReceived(mMeshID, data, data_size))
   58.71  	{
   58.72  		// good fetch from sim, write to VFS for caching
   58.73  		LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE);
    59.1 --- a/indra/newview/llpanellandmarks.cpp	Wed Nov 29 23:04:31 2017 +0100
    59.2 +++ b/indra/newview/llpanellandmarks.cpp	Wed Nov 29 23:04:58 2017 +0100
    59.3 @@ -66,7 +66,7 @@
    59.4  
    59.5  static const std::string OPTIONS_BUTTON_NAME = "options_gear_btn";
    59.6  static const std::string ADD_BUTTON_NAME = "add_btn";
    59.7 -static const std::string ADD_FOLDER_BUTTON_NAME = "add_folder_btn";
    59.8 +//static const std::string ADD_FOLDER_BUTTON_NAME = "add_folder_btn"; // <FS:Ansariel> Doesn't exist as of 18-11-2017
    59.9  static const std::string TRASH_BUTTON_NAME = "trash_btn";
   59.10  
   59.11  
   59.12 @@ -203,6 +203,7 @@
   59.13  	,	mGearButton(NULL)
   59.14  	,	mGearFolderMenu(NULL)
   59.15  	,	mGearLandmarkMenu(NULL)
   59.16 +	,	mMyLandmarksAccordionTab(NULL) // <FS:Ansariel> Fix warnings log spam
   59.17  {
   59.18  	mInventoryObserver = new LLLandmarksPanelObserver(this);
   59.19  	gInventory.addObserver(mInventoryObserver);
   59.20 @@ -493,18 +494,43 @@
   59.21  	if (!item)
   59.22  		return NULL;
   59.23  
   59.24 -	LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(tab_name);
   59.25 -	if (!tab->isExpanded())
   59.26 +	// <FS:Ansariel> Fix warnings log spam
   59.27 +	//LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(tab_name);
   59.28 +	//if (!tab->isExpanded())
   59.29 +	LLView* tab_view = findChildView(tab_name);
   59.30 +	LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(tab_view);
   59.31 +	if (tab && !tab->isExpanded())
   59.32 +	// </FS:Ansariel>
   59.33  	{
   59.34  		tab->changeOpenClose(false);
   59.35  	}
   59.36 +	// <FS:Ansariel> Fix warnings log spam
   59.37 +	else
   59.38 +	{
   59.39 +		LLPanel* panel = dynamic_cast<LLPanel*>(tab_view);
   59.40 +		if (panel)
   59.41 +		{
   59.42 +			panel->getParentByType<LLTabContainer>()->selectTabPanel(panel);
   59.43 +		}
   59.44 +	}
   59.45 +	// </FS:Ansariel>
   59.46  
   59.47  	root->setSelection(item, FALSE, take_keyboard_focus);
   59.48  
   59.49 -	LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
   59.50 -	LLRect screen_rc;
   59.51 -	localRectToScreen(item->getRect(), &screen_rc);
   59.52 -	accordion->notifyParent(LLSD().with("scrollToShowRect", screen_rc.getValue()));
   59.53 +	// <FS:Ansariel> Fix warnings log spam
   59.54 +	//LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
   59.55 +	//LLRect screen_rc;
   59.56 +	//localRectToScreen(item->getRect(), &screen_rc);
   59.57 +	//accordion->notifyParent(LLSD().with("scrollToShowRect", screen_rc.getValue()));
   59.58 +	LLView* accordion_view = findChildView("landmarks_accordion");
   59.59 +	LLAccordionCtrl* accordion = dynamic_cast<LLAccordionCtrl*>(accordion_view);
   59.60 +	if (accordion)
   59.61 +	{
   59.62 +		LLRect screen_rc;
   59.63 +		localRectToScreen(item->getRect(), &screen_rc);
   59.64 +		accordion->notifyParent(LLSD().with("scrollToShowRect", screen_rc.getValue()));
   59.65 +	}
   59.66 +	// </FS:Ansariel>
   59.67  
   59.68  	return item;
   59.69  }
   59.70 @@ -635,7 +661,15 @@
   59.71  
   59.72  LLAccordionCtrlTab* LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list,	bool expand_tab)
   59.73  {
   59.74 -	LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
   59.75 +	// <FS:Ansariel> Fix warnings log spam
   59.76 +	//LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
   59.77 +	LLView* accordion_tab_view = findChildView(accordion_tab_name);
   59.78 +	LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(accordion_tab_view);
   59.79 +	if (!accordion_tab)
   59.80 +	{
   59.81 +		return NULL;
   59.82 +	}
   59.83 +	// </FS:Ansariel>
   59.84  
   59.85  	mAccordionTabs.push_back(accordion_tab);
   59.86  	accordion_tab->setDropDownStateChangedCallback(
   59.87 @@ -732,11 +766,11 @@
   59.88  
   59.89  void LLLandmarksPanel::updateListCommands()
   59.90  {
   59.91 -	bool add_folder_enabled = isActionEnabled("category");
   59.92 +	//bool add_folder_enabled = isActionEnabled("category"); // <FS:Ansariel> Doesn't exist as of 18-11-2017
   59.93  	bool trash_enabled = isActionEnabled("delete") && (isFolderSelected() || isLandmarkSelected());
   59.94  
   59.95  	// keep Options & Add Landmark buttons always enabled
   59.96 -	mListCommands->getChildView(ADD_FOLDER_BUTTON_NAME)->setEnabled(add_folder_enabled);
   59.97 +	//mListCommands->getChildView(ADD_FOLDER_BUTTON_NAME)->setEnabled(add_folder_enabled); // <FS:Ansariel> Doesn't exist as of 18-11-2017
   59.98  	mListCommands->getChildView(TRASH_BUTTON_NAME)->setEnabled(trash_enabled);
   59.99  }
  59.100  
    60.1 --- a/indra/newview/llpanelmaininventory.cpp	Wed Nov 29 23:04:31 2017 +0100
    60.2 +++ b/indra/newview/llpanelmaininventory.cpp	Wed Nov 29 23:04:58 2017 +0100
    60.3 @@ -499,7 +499,16 @@
    60.4  void LLPanelMainInventory::resetFilters()
    60.5  {
    60.6  	LLFloaterInventoryFinder *finder = getFinder();
    60.7 -	getActivePanel()->getFilter().resetDefault();
    60.8 +	// <FS:Ansariel> Properly reset all filters
    60.9 +	//getActivePanel()->getFilter().resetDefault();
   60.10 +	LLInventoryFilter& filter = getActivePanel()->getFilter();
   60.11 +	filter.resetDefault();
   60.12 +	filter.setFilterCreator(LLInventoryFilter::FILTERCREATOR_ALL);
   60.13 +	filter.setSearchType(LLInventoryFilter::SEARCHTYPE_NAME);
   60.14 +	filter.setFilterTransferable(FALSE);
   60.15 +	getActivePanel()->updateShowInboxFolder(gSavedSettings.getBOOL("FSShowInboxFolder"));
   60.16 +	updateFilterDropdown(&filter);
   60.17 +	// </FS:Ansariel>
   60.18  	if (finder)
   60.19  	{
   60.20  		finder->updateElementsFromFilter();
   60.21 @@ -1173,17 +1182,7 @@
   60.22  // <FS:Ansariel> FIRE-5160: Don't reset inventory filter when clearing search term
   60.23  void LLFloaterInventoryFinder::onResetBtn()
   60.24  {
   60.25 -	mFilter->resetDefault();
   60.26 -	LLInventoryPanel* panel = mPanelMainInventory->getPanel();
   60.27 -	if (panel->getName() == "All Items")
   60.28 -	{
   60.29 -		panel->setFilterTypes(0xffffffffffffffffULL);
   60.30 -	}
   60.31 -
   60.32 -	mPanelMainInventory->updateFilterDropdown(mFilter);
   60.33 -	mFilter->setFilterCreator(LLInventoryFilter::FILTERCREATOR_ALL);
   60.34 -
   60.35 -	updateElementsFromFilter();
   60.36 +	mPanelMainInventory->resetFilters();
   60.37  }
   60.38  // </FS:Ansariel>
   60.39  
   60.40 @@ -1938,7 +1937,6 @@
   60.41  	{
   60.42  		getActivePanel()->setSearchType(LLInventoryFilter::SEARCHTYPE_ALL);
   60.43  	}
   60.44 -	resetFilters();
   60.45  }
   60.46  
   60.47  BOOL LLPanelMainInventory::isSearchTypeChecked(const LLSD& userdata)
    61.1 --- a/indra/newview/llpanelplaceinfo.cpp	Wed Nov 29 23:04:31 2017 +0100
    61.2 +++ b/indra/newview/llpanelplaceinfo.cpp	Wed Nov 29 23:04:58 2017 +0100
    61.3 @@ -87,11 +87,21 @@
    61.4  	mMaturityRatingIcon = getChild<LLIconCtrl>("maturity_icon");
    61.5  	mMaturityRatingText = getChild<LLTextBox>("maturity_value");
    61.6  
    61.7 -	mScrollingPanel = getChild<LLPanel>("scrolling_panel");
    61.8 -	mScrollContainer = getChild<LLScrollContainer>("place_scroll");
    61.9 +	// <FS:Ansariel> Fix warnings log spam
   61.10 +	//mScrollingPanel = getChild<LLPanel>("scrolling_panel");
   61.11 +	//mScrollContainer = getChild<LLScrollContainer>("place_scroll");
   61.12  
   61.13 -	mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
   61.14 -	mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
   61.15 +	//mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
   61.16 +	//mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
   61.17 +	mScrollingPanel = findChild<LLPanel>("scrolling_panel");
   61.18 +	mScrollContainer = findChild<LLScrollContainer>("place_scroll");
   61.19 +
   61.20 +	if (mScrollingPanel && mScrollContainer)
   61.21 +	{
   61.22 +		mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
   61.23 +		mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
   61.24 +	}
   61.25 +	// </FS:Ansariel>
   61.26  
   61.27  	return TRUE;
   61.28  }
    62.1 --- a/indra/newview/llscripteditor.cpp	Wed Nov 29 23:04:31 2017 +0100
    62.2 +++ b/indra/newview/llscripteditor.cpp	Wed Nov 29 23:04:58 2017 +0100
    62.3 @@ -88,12 +88,15 @@
    62.4  	
    62.5  	if (mShowLineNumbers)
    62.6  	{
    62.7 -		S32 left = 0;
    62.8 +		//S32 left = 0; // <FS:Ansariel> FIRE-6955: Line numbers not using correct transparency
    62.9  		S32 top = getRect().getHeight();
   62.10  		S32 bottom = 0;
   62.11 -		
   62.12 -		gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
   62.13 -		gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
   62.14 +
   62.15 +		// <FS:Ansariel> FIRE-6955: Line numbers not using correct transparency
   62.16 +		//gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
   62.17 +		//gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
   62.18 +		gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3 % getCurrentTransparency()); // separator
   62.19 +		// </FS:Ansariel>
   62.20  		
   62.21  		S32 last_line_num = -1;
   62.22  		
   62.23 @@ -110,7 +113,10 @@
   62.24  			// draw the line numbers
   62.25  			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)
   62.26  			{
   62.27 -				const LLFontGL *num_font = LLFontGL::getFontMonospace();
   62.28 +				// <FS:Ansariel> Script editor ignoring font selection
   62.29 +				//const LLFontGL *num_font = LLFontGL::getFontMonospace();
   62.30 +				const LLFontGL *num_font = getFont();
   62.31 +				// </FS:Ansariel>
   62.32  				const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum ));
   62.33  				BOOL is_cur_line = cursor_line == line.mLineNum;
   62.34  				const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
    63.1 --- a/indra/newview/llselectmgr.cpp	Wed Nov 29 23:04:31 2017 +0100
    63.2 +++ b/indra/newview/llselectmgr.cpp	Wed Nov 29 23:04:58 2017 +0100
    63.3 @@ -238,11 +238,6 @@
    63.4  
    63.5  	mForceSelection = FALSE;
    63.6  	mShowSelection = FALSE;
    63.7 -	
    63.8 -	// <FS:KC> show/hide build highlight
    63.9 -	mFSShowHideHighlight = FS_SHOW_HIDE_HIGHLIGHT_NORMAL;
   63.10 -	// </FS:KC>
   63.11 -
   63.12  }
   63.13  
   63.14  
   63.15 @@ -5953,10 +5948,7 @@
   63.16  }
   63.17  void LLSelectMgr::renderSilhouettes(BOOL for_hud)
   63.18  {
   63.19 -	// <FS:KC> show/hide build highlight
   63.20 -	// if (!mRenderSilhouettes || !mRenderHighlightSelections)
   63.21 -	if (((mFSShowHideHighlight == FS_SHOW_HIDE_HIGHLIGHT_NORMAL) && (!mRenderSilhouettes || !mRenderHighlightSelections)) || (mFSShowHideHighlight == FS_SHOW_HIDE_HIGHLIGHT_HIDE))
   63.22 -	// </FS:KC>
   63.23 +	if (!mRenderSilhouettes || !mRenderHighlightSelections)
   63.24  	{
   63.25  		return;
   63.26  	}
    64.1 --- a/indra/newview/llselectmgr.h	Wed Nov 29 23:04:31 2017 +0100
    64.2 +++ b/indra/newview/llselectmgr.h	Wed Nov 29 23:04:58 2017 +0100
    64.3 @@ -69,15 +69,6 @@
    64.4  const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;
    64.5  // </FS:Ansariel>
    64.6  
    64.7 -// <FS:KC> show/hide build highlight
    64.8 -enum EFSShowHideHighlight
    64.9 -{
   64.10 -	FS_SHOW_HIDE_HIGHLIGHT_NORMAL = 0,
   64.11 -	FS_SHOW_HIDE_HIGHLIGHT_SHOW = 1,
   64.12 -	FS_SHOW_HIDE_HIGHLIGHT_HIDE = 2
   64.13 -};
   64.14 -// </FS:KC>
   64.15 -
   64.16  // This is used by the DeRezObject message to determine where to put
   64.17  // derezed tasks.
   64.18  enum EDeRezDestination
   64.19 @@ -621,10 +612,6 @@
   64.20  	void renderSilhouettes(BOOL for_hud);
   64.21  	void enableSilhouette(BOOL enable) { mRenderSilhouettes = enable; }
   64.22  	
   64.23 -	// <FS:KC> show/hide build highlight
   64.24 -	void setFSShowHideHighlight(EFSShowHideHighlight state) { mFSShowHideHighlight = state; }
   64.25 -	// </FS:KC>
   64.26 -	
   64.27  	////////////////////////////////////////////////////////////////
   64.28  	// Utility functions that operate on the current selection
   64.29  	////////////////////////////////////////////////////////////////
   64.30 @@ -926,10 +913,6 @@
   64.31  
   64.32  	LLAnimPauseRequest		mPauseRequest;
   64.33  
   64.34 -// <FS:KC> show/hide build highlight
   64.35 -	EFSShowHideHighlight	mFSShowHideHighlight;
   64.36 -// </FS:KC>
   64.37 -
   64.38  // <FS:Zi> Warning when trying to duplicate while in edit linked parts/select face mode
   64.39  public:
   64.40  	// returns TRUE if current selection does not contain individual selections
    65.1 --- a/indra/newview/llstartup.cpp	Wed Nov 29 23:04:31 2017 +0100
    65.2 +++ b/indra/newview/llstartup.cpp	Wed Nov 29 23:04:58 2017 +0100
    65.3 @@ -375,6 +375,7 @@
    65.4  void downloadGridlistError( LLSD const &aData, std::string const &aURL )
    65.5  {
    65.6  	LL_WARNS() << "Failed to download grid list from " << aURL << LL_ENDL;
    65.7 +	sGridListRequestReady = true;
    65.8  }
    65.9  
   65.10   void downloadGridstatusComplete( LLSD const &aData )
   65.11 @@ -670,6 +671,8 @@
   65.12  		gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
   65.13  		gSavedSettings.setString("LastGPUString", thisGPU);
   65.14  
   65.15 +		// <FS:Ansariel> Re-enable feature table download
   65.16 +		LLFeatureManager::getInstance()->fetchHTTPTables();
   65.17  
   65.18  		std::string xml_file = LLUI::locateSkin("xui_version.xml");
   65.19  		LLXMLNodePtr root;
   65.20 @@ -884,7 +887,7 @@
   65.21  			}
   65.22  
   65.23  			std::string url = gSavedSettings.getString("GridListDownloadURL");
   65.24 -			LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet( url, boost::bind( downloadGridlistComplete, _1 ), boost::bind( downloadGridlistError, _1, url ) );
   65.25 +			FSCoreHttpUtil::callbackHttpGet(url, last_modified, boost::bind(downloadGridlistComplete, _1), boost::bind(downloadGridlistError, _1, url));
   65.26  		}
   65.27  #ifdef OPENSIM // <FS:AW optional opensim support>
   65.28  		// Fetch grid infos as needed
   65.29 @@ -1424,6 +1427,10 @@
   65.30  		std::string user_windlight_days_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", ""));
   65.31  		LLFile::mkdir(user_windlight_days_path_name.c_str());
   65.32  
   65.33 +		// <FS:Ansariel> Create user fonts directory
   65.34 +		std::string user_fonts_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "fonts", ""));
   65.35 +		LLFile::mkdir(user_fonts_path_name.c_str());
   65.36 +
   65.37  		// <FS:WS> Initalize Account based asset_blacklist
   65.38  		FSAssetBlacklist::getInstance()->init();
   65.39  
   65.40 @@ -4528,6 +4535,10 @@
   65.41  	}
   65.42  	// </FS:AW>
   65.43  
   65.44 +	// <COLOSI opensim multi-currency support>
   65.45 +	std::string prev_currency_symbol = Tea::getCurrency();
   65.46 +	// </COLOSI opensim multi-currency support>
   65.47 +
   65.48  // <FS:AW opensim currency support>
   65.49  	std::string currency = "L$";
   65.50  #ifdef OPENSIM // <FS:AW optional opensim support>
   65.51 @@ -4544,6 +4555,17 @@
   65.52  	Tea::setCurrency(currency);
   65.53  // </FS:AW opensim currency support>
   65.54  
   65.55 +	// <COLOSI  opensim multi-currency support>
   65.56 +	// Blank out the region currency which is set in in lfsimfeatureshandler
   65.57 +	Tea::setRegionCurrency(LLStringUtil::null);
   65.58 +	std::string new_currency_symbol = Tea::getCurrency();
   65.59 +	// If currency symbol has changed, update currency symbols where manually necessary.
   65.60 +	if (new_currency_symbol != prev_currency_symbol)
   65.61 +	{
   65.62 +		LFSimFeatureHandler::updateCurrencySymbols();
   65.63 +	}
   65.64 +	// </COLOSI opensim multi-currency support>
   65.65 +
   65.66  // <FS:AW  opensim destinations and avatar picker>
   65.67  	if(response.has("avatar_picker_url"))
   65.68  	{
    66.1 --- a/indra/newview/llstatusbar.cpp	Wed Nov 29 23:04:31 2017 +0100
    66.2 +++ b/indra/newview/llstatusbar.cpp	Wed Nov 29 23:04:58 2017 +0100
    66.3 @@ -718,6 +718,16 @@
    66.4  	std::string label_str = getString("buycurrencylabel", string_args);
    66.5  	mBoxBalance->setValue(label_str);
    66.6  
    66.7 +	// <COLOSI opensim currency support>
    66.8 +	// Unclear if call to getTextBoundingRect updates text but assuming it calls length()
    66.9 +	// when getting the bounding box which will update the text and get the length of the
   66.10 +	// wrapped (Tea::wrapCurrency) text (see lluistring).  If not, and currency symbols 
   66.11 +	// that are not two characters have the wrong size bounding rect, then the correct
   66.12 +	// place to fix this is in the getTextBoundingRect() function, not here.
   66.13 +	// buy_rect below should be properly set to dirty() when we modify the currency and
   66.14 +	// should also be updated and wrapped before width is determined.
   66.15 +	// </COLOSI opensim currency support>
   66.16 +
   66.17  	// Resize the L$ balance background to be wide enough for your balance plus the buy button
   66.18  	{
   66.19  		const S32 HPAD = 24;
   66.20 @@ -1054,6 +1064,21 @@
   66.21  	mBoxBalance->setVisible(show);
   66.22  }
   66.23  
   66.24 +// <COLOSI opensim multi-currency support>
   66.25 +void LLStatusBar::updateCurrencySymbols()
   66.26 +{
   66.27 +	// Update "Buy L$" button because it is only evaluated once when panel is loaded
   66.28 +	LLButton* buyButton = findChild<LLButton>("buyL");
   66.29 +	if (buyButton)
   66.30 +	{
   66.31 +		buyButton->updateCurrencySymbols();
   66.32 +	}
   66.33 +	// Should not need to update the balance display because it is updated frequently.
   66.34 +	// If it does require an update, do so via a balance update request so we don't
   66.35 +	// switch the symbol without updating the balance.
   66.36 +}
   66.37 +// </COLOSI opensim multi-currency support>
   66.38 +
   66.39  void LLStatusBar::onBandwidthGraphButtonClicked()
   66.40  {
   66.41  	if (gSavedSettings.getBOOL("FSUseStatsInsteadOfLagMeter"))
    67.1 --- a/indra/newview/llstatusbar.h	Wed Nov 29 23:04:31 2017 +0100
    67.2 +++ b/indra/newview/llstatusbar.h	Wed Nov 29 23:04:58 2017 +0100
    67.3 @@ -152,6 +152,11 @@
    67.4  	
    67.5  	void showBalance(bool show);	// <FS:CR> Hide currency balance in snapshots
    67.6  
    67.7 +	// <COLOSI opensim multi-currency support>
    67.8 +	// force update of the "BUY L$" button when currency symbol is changed.
    67.9 +	void updateCurrencySymbols();
   67.10 +	// </COLOSI opensim multi-currency support>
   67.11 +
   67.12  private:
   67.13  	
   67.14  	void onClickBuyCurrency();
    68.1 --- a/indra/newview/llviewerregion.cpp	Wed Nov 29 23:04:31 2017 +0100
    68.2 +++ b/indra/newview/llviewerregion.cpp	Wed Nov 29 23:04:58 2017 +0100
    68.3 @@ -3168,7 +3168,7 @@
    68.4  			mViewerAssetUrl = url;
    68.5  		}
    68.6  		// <FS:Ansariel> [UDP Assets]
    68.7 -		else if (name == "GetTexure")
    68.8 +		else if (name == "GetTexture")
    68.9  		{
   68.10  			mHttpUrl = url;
   68.11  		}
   68.12 @@ -3187,7 +3187,7 @@
   68.13  			mViewerAssetUrl = url;
   68.14  		}
   68.15  		// <FS:Ansariel> [UDP Assets]
   68.16 -		else if (name == "GetTexure")
   68.17 +		else if (name == "GetTexture")
   68.18  		{
   68.19  			mHttpUrl = url;
   68.20  		}
    69.1 --- a/indra/newview/llviewertexturelist.h	Wed Nov 29 23:04:31 2017 +0100
    69.2 +++ b/indra/newview/llviewertexturelist.h	Wed Nov 29 23:04:58 2017 +0100
    69.3 @@ -156,6 +156,7 @@
    69.4  	void addImageToList(LLViewerFetchedTexture *image);
    69.5  	void removeImageFromList(LLViewerFetchedTexture *image);
    69.6  
    69.7 +public: 	// PoundLife - Improved Object Inspect
    69.8  	LLViewerFetchedTexture * getImage(const LLUUID &image_id,									 
    69.9  									 FTType f_type = FTT_DEFAULT,
   69.10  									 BOOL usemipmap = TRUE,
   69.11 @@ -166,6 +167,7 @@
   69.12  									 LLHost request_from_host = LLHost()
   69.13  									 );
   69.14  	
   69.15 +private:	// PoundLife - Improved Object Inspect
   69.16  	LLViewerFetchedTexture * getImageFromFile(const std::string& filename,									 
   69.17  									 FTType f_type = FTT_LOCAL_FILE,
   69.18  									 BOOL usemipmap = TRUE,
    70.1 --- a/indra/newview/llviewerwindow.cpp	Wed Nov 29 23:04:31 2017 +0100
    70.2 +++ b/indra/newview/llviewerwindow.cpp	Wed Nov 29 23:04:58 2017 +0100
    70.3 @@ -1850,13 +1850,14 @@
    70.4  	LLCoordScreen scr;
    70.5      mWindow->getSize(&scr);
    70.6  
    70.7 -    if(p.fullscreen && ( scr.mX!=p.width || scr.mY!=p.height))
    70.8 -    {
    70.9 -		LL_WARNS() << "Fullscreen has forced us in to a different resolution now using "<<scr.mX<<" x "<<scr.mY<<LL_ENDL;
   70.10 -		gSavedSettings.setS32("FullScreenWidth",scr.mX);
   70.11 -		gSavedSettings.setS32("FullScreenHeight",scr.mY);
   70.12 -    }
   70.13 -
   70.14 +	// <FS:Ansariel> Settings don't exist anymore as of 28-11-2017
   70.15 +  //  if(p.fullscreen && ( scr.mX!=p.width || scr.mY!=p.height))
   70.16 +  //  {
   70.17 +		//LL_WARNS() << "Fullscreen has forced us in to a different resolution now using "<<scr.mX<<" x "<<scr.mY<<LL_ENDL;
   70.18 +		//gSavedSettings.setS32("FullScreenWidth",scr.mX);
   70.19 +		//gSavedSettings.setS32("FullScreenHeight",scr.mY);
   70.20 +  //  }
   70.21 +	// </FS:Ansariel>
   70.22  
   70.23  	F32 system_scale_factor = mWindow->getSystemUISize();
   70.24  	if (system_scale_factor < MIN_UI_SCALE || system_scale_factor > MAX_UI_SCALE)
    71.1 --- a/indra/newview/quickprefs.cpp	Wed Nov 29 23:04:31 2017 +0100
    71.2 +++ b/indra/newview/quickprefs.cpp	Wed Nov 29 23:04:58 2017 +0100
    71.3 @@ -96,7 +96,7 @@
    71.4  // </FS:Zi>
    71.5  
    71.6  FloaterQuickPrefs::FloaterQuickPrefs(const LLSD& key)
    71.7 -:	LLTransientDockableFloater(NULL, true, key),
    71.8 +:	LLTransientDockableFloater(NULL, false, key),
    71.9  	mAvatarZOffsetSlider(NULL),
   71.10  	mRlvBehaviorCallbackConnection(),
   71.11  	mRegionChangedSlot()
    72.1 Binary file indra/newview/skins/ansastorm/textures/widgets/ScrollTrack_Horiz.png has changed
    73.1 Binary file indra/newview/skins/ansastorm/textures/widgets/ScrollTrack_Vert.png has changed
    74.1 --- a/indra/newview/skins/ansastorm/xui/en/panel_main_inventory.xml	Wed Nov 29 23:04:31 2017 +0100
    74.2 +++ b/indra/newview/skins/ansastorm/xui/en/panel_main_inventory.xml	Wed Nov 29 23:04:58 2017 +0100
    74.3 @@ -453,7 +453,7 @@
    74.4  
    74.5    <combo_box
    74.6     name="filter_combo_box"
    74.7 -   right="-26"
    74.8 +   right="-46"
    74.9     height="18"
   74.10     left_pad="4"
   74.11     top_delta="-2"
   74.12 @@ -485,6 +485,17 @@
   74.13     image_overlay="Script_Config"
   74.14     width="18"
   74.15     height="18"
   74.16 +   right="-26"
   74.17 +   top_delta="0"
   74.18 +   follows="top|right"
   74.19 +   layout="topleft"/>
   74.20 +
   74.21 +  <button
   74.22 +   commit_callback.function="Inventory.ResetFilters"
   74.23 +   name="resetfilters_btn"
   74.24 +   image_overlay="StopReload_Off"
   74.25 +   width="18"
   74.26 +   height="18"
   74.27     right="-6"
   74.28     top_delta="0"
   74.29     follows="top|right"
    75.1 --- a/indra/newview/skins/default/xui/de/floater_inspect.xml	Wed Nov 29 23:04:31 2017 +0100
    75.2 +++ b/indra/newview/skins/default/xui/de/floater_inspect.xml	Wed Nov 29 23:04:58 2017 +0100
    75.3 @@ -6,12 +6,31 @@
    75.4  	<floater.string name="Group">
    75.5  		(Gruppe)
    75.6  	</floater.string>
    75.7 +	<floater.string name="stats_list">
    75.8 +		Objekt-Statistik:
    75.9 +
   75.10 +[NUM_OBJECTS] Objekte, [NUM_PRIMS] Prims
   75.11 +
   75.12 +Flächen: [NUM_FACES]
   75.13 +Vertices: [NUM_VERTICES]
   75.14 +Dreiecke: [NUM_TRIANGLES]
   75.15 +
   75.16 +Texturen: [NUM_TEXTURES]
   75.17 +TMem: [TEXTURE_MEMORY] KB
   75.18 +VRAM: [VRAM_USAGE] KB
   75.19 +	</floater.string>
   75.20 +	<text_editor name="linksetstats_text" value="(wird geladen...)"/>
   75.21  	<scroll_list name="object_list" tool_tip="Wählen Sie ein Objekt aus dieser Liste, um es in der Second Life-Welt zu markieren">
   75.22  		<scroll_list.columns label="Objektname" name="object_name"/>
   75.23 +		<scroll_list.columns label="Beschreibung" name="description"/>
   75.24  		<scroll_list.columns label="Besitzer" name="owner_name" />
   75.25  		<scroll_list.columns label="Ersteller" name="creator_name"/>
   75.26 +		<scroll_list.columns label="Flächen" name="facecount"/>
   75.27 +		<scroll_list.columns label="Vertices" name="vertexcount"/>
   75.28 +		<scroll_list.columns label="Dreiecke" name="trianglecount"/>
   75.29 +		<scroll_list.columns label="TMem" name="tramcount"/>
   75.30 +		<scroll_list.columns label="VRAM" name="vramcount"/>
   75.31  		<scroll_list.columns label="Erstellungsdatum" name="creation_date"/>
   75.32 -		<scroll_list.columns label="Beschreibung" name="description"/>
   75.33  	</scroll_list>
   75.34  	<button label="Besitzerprofil einsehen..." name="button owner" tool_tip="Profil des Besitzers des markierten Objekts einsehen" width="155"/>
   75.35  	<button label="Erstellerprofil einsehen..." left="175" name="button creator" tool_tip="Profil des ursprünglichen Erstellers des markierten Objekts einsehen" width="155"/>
    76.1 --- a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    76.2 +++ b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    76.3 @@ -229,14 +229,14 @@
    76.4  		</text>
    76.5  		<text name="tooltip_textbox4">
    76.6  			Pixel (Erfordert Neustart)
    76.7 -V3-Standard 0. V1-Standard 2.
    76.8 +[VIEWER_GENERATION]-Standard 0. Viewer 1-Standard 2.
    76.9  		</text>
   76.10  		<text name="Label_FolderItemViewHeight">
   76.11  			Höhe Ordner-Eintrag:
   76.12  		</text>
   76.13  		<text name="Label_FolderItemViewHeight_Scale">
   76.14  			Pixel (Erfordert Neustart)
   76.15 -V3-Standard 20. V1-Standard 18.
   76.16 +[VIEWER_GENERATION]-Standard 20. Viewer 1-Standard 18.
   76.17  		</text>
   76.18  	</panel>
   76.19  </tab_container>
    77.1 --- a/indra/newview/skins/default/xui/en/floater_inspect.xml	Wed Nov 29 23:04:31 2017 +0100
    77.2 +++ b/indra/newview/skins/default/xui/en/floater_inspect.xml	Wed Nov 29 23:04:58 2017 +0100
    77.3 @@ -19,39 +19,90 @@
    77.4       name="Group">
    77.5          (Group)
    77.6      </floater.string>
    77.7 +    <floater.string name="stats_list">
    77.8 +        Total stats:
    77.9 +
   77.10 +[NUM_OBJECTS] objects, [NUM_PRIMS] prims
   77.11 +
   77.12 +Faces: [NUM_FACES]
   77.13 +Vertices: [NUM_VERTICES]
   77.14 +Triangles: [NUM_TRIANGLES]
   77.15 +
   77.16 +Textures: [NUM_TEXTURES]
   77.17 +TMem: [TEXTURE_MEMORY] KB
   77.18 +VRAM: [VRAM_USAGE] KB
   77.19 +    </floater.string>
   77.20 +
   77.21 +    <text_editor
   77.22 +      top="24"
   77.23 +      left="5"
   77.24 +      width="120"
   77.25 +      height="242"
   77.26 +      layout="topleft"
   77.27 +      follows="left|top|bottom"
   77.28 +      name="linksetstats_text"
   77.29 +      max_length="2048"
   77.30 +      bg_visible="false"
   77.31 +      border_visible="true"
   77.32 +      allow_scroll="true"
   77.33 +      h_pad="2"
   77.34 +      v_pad="0"
   77.35 +      read_only="true"
   77.36 +      value="(loading...)"
   77.37 +      word_wrap="true"/>
   77.38      <scroll_list
   77.39 -     bottom="268"
   77.40 +     top="24"
   77.41 +     height="242"
   77.42       column_padding="0"
   77.43       draw_heading="true"
   77.44       follows="top|right|left|bottom"
   77.45       layout="topleft"
   77.46 -     left="10"
   77.47 +     left_pad="5"
   77.48       name="object_list"
   77.49 -     right="-10"
   77.50 -     tool_tip="Select an object from this list to highlight it in-world"
   77.51 -     top="20">
   77.52 +     right="-6"
   77.53 +     tool_tip="Select an object from this list to highlight it in-world">
   77.54          <scroll_list.columns
   77.55 -         relative_width="0.20"
   77.56 +         dynamic_width="true"
   77.57           label="Object Name"
   77.58           name="object_name" />
   77.59          <scroll_list.columns
   77.60 -         relative_width="0.20"
   77.61 +         dynamic_width="true"
   77.62 +         label="Description"
   77.63 +         name="description" />
   77.64 +        <scroll_list.columns
   77.65 +         dynamic_width="true"
   77.66           label="Owner Name"
   77.67           name="owner_name" />
   77.68          <scroll_list.columns
   77.69 -         relative_width="0.20"
   77.70 +         dynamic_width="true"
   77.71           label="Creator Name"
   77.72           name="creator_name" />
   77.73          <scroll_list.columns
   77.74 +         label="Faces"
   77.75 +         name="facecount"
   77.76 +         width="45" />
   77.77 +        <scroll_list.columns
   77.78 +         label="Vertices"
   77.79 +         name="vertexcount"
   77.80 +         width="55" />
   77.81 +        <scroll_list.columns
   77.82 +         label="Triangles"
   77.83 +         name="trianglecount"
   77.84 +         width="55" />
   77.85 +        <scroll_list.columns
   77.86 +         label="TMem"
   77.87 +         name="tramcount"
   77.88 +         width="55" />
   77.89 +        <scroll_list.columns
   77.90 +         label="VRAM"
   77.91 +         name="vramcount"
   77.92 +         width="55" />
   77.93 +        <scroll_list.columns
   77.94           label="Creation Date"
   77.95           name="creation_date"
   77.96 -         relative_width="0.20"
   77.97 +         dynamic_width="true"
   77.98           sort_column="creation_date_sort"/>
   77.99          <scroll_list.columns
  77.100 -         label="Description"
  77.101 -         name="description"
  77.102 -         relative_width="0.20" />
  77.103 -        <scroll_list.columns
  77.104           label=""
  77.105           name="creation_date_sort"
  77.106           width="-1" />
  77.107 @@ -63,7 +114,7 @@
  77.108       height="23"
  77.109       label="See Owner Profile..."
  77.110       layout="topleft"
  77.111 -     left_delta="-1"
  77.112 +     left="4"
  77.113       name="button owner"
  77.114       tool_tip="See profile of the highlighted object&apos;s owner"
  77.115       top_pad="4"
    78.1 --- a/indra/newview/skins/default/xui/en/floater_tools.xml	Wed Nov 29 23:04:31 2017 +0100
    78.2 +++ b/indra/newview/skins/default/xui/en/floater_tools.xml	Wed Nov 29 23:04:58 2017 +0100
    78.3 @@ -395,15 +395,12 @@
    78.4       width="134" />
    78.5    <check_box
    78.6       height="18"
    78.7 -     initial_value="true"
    78.8 +     control_name="RenderHighlightSelections"
    78.9       label="Show Highlight"
   78.10       layout="topleft"
   78.11       top_pad="-2"
   78.12       name="checkbox show highlight"
   78.13 -     width="134" >
   78.14 -		  <check_box.commit_callback
   78.15 -			function="BuildTool.commitShowHighlight"/>
   78.16 -	</check_box>
   78.17 +     width="134"/>
   78.18      <button
   78.19       left_pad="0"
   78.20       image_selected="ForwardArrow_Press"
    79.1 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml	Wed Nov 29 23:04:31 2017 +0100
    79.2 +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml	Wed Nov 29 23:04:58 2017 +0100
    79.3 @@ -780,7 +780,7 @@
    79.4          <menu_item_separator/>
    79.5          
    79.6          <menu_item_call
    79.7 -         label="Landmark This Place"
    79.8 +         label="Landmark this Place"
    79.9           name="Create Landmark Here">
   79.10              <menu_item_call.on_click
   79.11               function="World.CreateLandmark" />
   79.12 @@ -825,7 +825,7 @@
   79.13          <menu_item_separator/>
   79.14  
   79.15          <menu_item_call
   79.16 -             label="Buy This Land"
   79.17 +             label="Buy this Land"
   79.18               name="Buy Land">
   79.19                  <menu_item_call.on_click
   79.20                   function="Land.Buy" />
    80.1 --- a/indra/newview/skins/default/xui/en/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    80.2 +++ b/indra/newview/skins/default/xui/en/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    80.3 @@ -1532,7 +1532,7 @@
    80.4           length="1"
    80.5           line_spacing.pixels="5">
    80.6            pixels (requires restart)
    80.7 -V3 default 0. V1 default 2.
    80.8 +[VIEWER_GENERATION] default 0. Viewer 1 default 2.
    80.9          </text>
   80.10  
   80.11          <text
   80.12 @@ -1573,7 +1573,7 @@
   80.13           length="1"
   80.14           line_spacing.pixels="5">
   80.15            pixels (requires restart)
   80.16 -V3 default 20. V1 default 18.
   80.17 +[VIEWER_GENERATION] default 20. Viewer 1 default 18.
   80.18          </text>
   80.19  
   80.20  <!-- not a live preview
    81.1 --- a/indra/newview/skins/default/xui/es/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    81.2 +++ b/indra/newview/skins/default/xui/es/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    81.3 @@ -166,14 +166,14 @@
    81.4  			</text>
    81.5  			<text name="tooltip_textbox4" line_spacing.pixels="5">
    81.6  				pixels (requiere reiniciar)
    81.7 -0 por defecto en V3 y 2 en V1.
    81.8 +0 por defecto en [VIEWER_GENERATION] y 2 en Viewer 1.
    81.9  			</text>
   81.10  			<text name="Label_FolderItemViewHeight" width="165">
   81.11  				Altura de carpeta:
   81.12  			</text>
   81.13  			<text name="Label_FolderItemViewHeight_Scale" line_spacing.pixels="5">
   81.14  				pixels (requiere reiniciar)
   81.15 -20 por defecto en V3 y 18 en V1.
   81.16 +20 por defecto en [VIEWER_GENERATION] y 18 en Viewer 1.
   81.17  			</text>
   81.18  		</panel>
   81.19  	</tab_container>
    82.1 --- a/indra/newview/skins/default/xui/fr/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    82.2 +++ b/indra/newview/skins/default/xui/fr/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    82.3 @@ -138,12 +138,12 @@
    82.4  			<text name="tooltip_textbox3" width="195">Espacement entre les lignes :</text>
    82.5  			<text name="tooltip_textbox4">
    82.6             pixels (Redémarrage requis)
    82.7 - 0 par défaut pour le style V3, 2 pour le style V1.
    82.8 + 0 par défaut pour le style [VIEWER_GENERATION], 2 pour le style V1iewer .
    82.9  			</text>
   82.10  			<text name="Label_FolderItemViewHeight" width="195">Hauteur d'une ligne d'inventaire :</text>
   82.11  			<text name="Label_FolderItemViewHeight_Scale">
   82.12             pixels (Redémarrage requis)
   82.13 - 20 par défaut pour le style V3, 18 pour le style V1.
   82.14 + 20 par défaut pour le style [VIEWER_GENERATION], 18 pour le style Viewer 1.
   82.15  			</text>
   82.16  		</panel>
   82.17  	</tab_container>
    83.1 --- a/indra/newview/skins/default/xui/it/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    83.2 +++ b/indra/newview/skins/default/xui/it/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    83.3 @@ -128,7 +128,7 @@
    83.4          </text>
    83.5          <text name="tooltip_textbox4">
    83.6            Pixel (Richiesto riavvio)
    83.7 -V3 Default 0. V1 Default 2.
    83.8 +[VIEWER_GENERATION] Default 0. Viewer 1 Default 2.
    83.9          </text>
   83.10          <text name="Label_FolderItemViewHeight">
   83.11             Distanza massima 
   83.12 @@ -136,7 +136,7 @@
   83.13          </text>
   83.14          <text name="Label_FolderItemViewHeight_Scale">
   83.15            Pixel (Richiesto riavvio)
   83.16 -V3 Default 20. V1 Default 18.
   83.17 +[VIEWER_GENERATION] Default 20. Viewer 1 Default 18.
   83.18          </text>
   83.19      </panel>
   83.20  </tab_container>
    84.1 --- a/indra/newview/skins/default/xui/pl/floater_inspect.xml	Wed Nov 29 23:04:31 2017 +0100
    84.2 +++ b/indra/newview/skins/default/xui/pl/floater_inspect.xml	Wed Nov 29 23:04:58 2017 +0100
    84.3 @@ -3,12 +3,31 @@
    84.4  	<floater.string name="Group">
    84.5  		(Grupa)
    84.6  	</floater.string>
    84.7 +	<floater.string name="stats_list">
    84.8 +		Statystyki:
    84.9 +
   84.10 +Obiekty: [NUM_OBJECTS], primy: [NUM_PRIMS]
   84.11 +
   84.12 +Strony: [NUM_FACES]
   84.13 +Wierzchołki: [NUM_VERTICES]
   84.14 +Trójkąty: [NUM_TRIANGLES]
   84.15 +
   84.16 +Tekstury: [NUM_TEXTURES]
   84.17 +VRAM tekstur: [TEXTURE_MEMORY] KB
   84.18 +VRAM łącznie: [VRAM_USAGE] KB
   84.19 +	</floater.string>
   84.20 +	<text_editor name="linksetstats_text" value="(ładowanie...)"/>
   84.21  	<scroll_list name="object_list" tool_tip="Wybierz obiekt z tej listy, aby podświetlić go w świecie">
   84.22  		<scroll_list.columns label="Nazwa" name="object_name"/>
   84.23 +		<scroll_list.columns label="Opis" name="description"/>
   84.24  		<scroll_list.columns label="Właściciel" name="owner_name"/>
   84.25  		<scroll_list.columns label="Twórca" name="creator_name"/>
   84.26 +		<scroll_list.columns label="Strony" name="facecount" />
   84.27 +		<scroll_list.columns label="Wierzchołki" name="vertexcount" />
   84.28 +		<scroll_list.columns label="Trójkąty" name="trianglecount" />
   84.29 +		<scroll_list.columns label="VRAM tekstur" name="tramcount" />
   84.30 +		<scroll_list.columns label="VRAM łącznie" name="vramcount" />
   84.31  		<scroll_list.columns label="Utworzony" name="creation_date"/>
   84.32 -		<scroll_list.columns label="Opis" name="description"/>
   84.33  	</scroll_list>
   84.34  	<button label="Profil Właściciela..." name="button owner" tool_tip="Zobacz profil Właściciela podświetlonego obiektu"/>
   84.35  	<button label="Profil Twórcy..." name="button creator" tool_tip="Zobacz profil Twórcy podświetlonego obiektu"/>
    85.1 --- a/indra/newview/skins/default/xui/pl/notifications.xml	Wed Nov 29 23:04:31 2017 +0100
    85.2 +++ b/indra/newview/skins/default/xui/pl/notifications.xml	Wed Nov 29 23:04:58 2017 +0100
    85.3 @@ -4935,9 +4935,9 @@
    85.4  		<usetemplate ignoretext="Informuj mnie, że masowa zmiana widoczności online może zająć trochę czasu" name="okignore" />
    85.5  	</notification>
    85.6  	<notification name="RenderVolumeLODFactorWarning">
    85.7 -		UWAGA: Wygląda na to, że poziom detali (LOD) jest ustawiony na wysoką wartość.
    85.8 -
    85.9 -Wartości wyższe niż 8 są bez znaczenia i nie powodują żadnej poprawy. Powinieneś/aś ustawić go na nie więcej niż 4, a i to tylko w wyjątkowych sytuacjach (jak robienie zdjęć w wysokiej rozdzielczości). Ustawienie zbyt wysokiej wartości poważnie obniża wydajność grafiki.
   85.10 +		UWAGA: Wygląda na to, że Twój poziom detali (LOD) jest ustawiony na wysoką wartość.
   85.11 +
   85.12 +Wartości wyższe niż 8 są bez znaczenia i nie powodują żadnej poprawy. Nie powinieneś/aś ustawiać go na więcej niż 4, a i to tylko w wyjątkowych sytuacjach (jak robienie zdjęć w wysokiej rozdzielczości). Ustawienie zbyt wysokiej wartości poważnie obniża wydajność grafiki.
   85.13  
   85.14  Do codziennego użytku LOD ustawiony na 2 powinien wystarczyć. Jeśli posiadasz obiekty, które wyglądają na zdeformowane z taką wartością, to powinieneś/aś rozważyć ich wymianę.
   85.15  		<usetemplate ignoretext="Ostrzegaj o wysokim poziomie detali" name="okignore" />
    86.1 --- a/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    86.2 +++ b/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    86.3 @@ -215,14 +215,14 @@
    86.4          </text>
    86.5          <text name="tooltip_textbox4">
    86.6            pikseli (wymaga restartu)
    86.7 -V3 domyślnie 0. V1 domyślnie 2.
    86.8 +[VIEWER_GENERATION] domyślnie 0. V1 domyślnie 2.
    86.9          </text>
   86.10          <text name="Label_FolderItemViewHeight">
   86.11             Wysokość w folderach:
   86.12          </text>
   86.13          <text name="Label_FolderItemViewHeight_Scale">
   86.14            pikseli (wymaga restartu)
   86.15 -V3 domyślnie 20. V1 domyślnie 18.
   86.16 +[VIEWER_GENERATION] domyślnie 20. V1 domyślnie 18.
   86.17          </text>
   86.18      </panel>
   86.19  </tab_container>
    87.1 --- a/indra/newview/skins/default/xui/ru/panel_preferences_UI.xml	Wed Nov 29 23:04:31 2017 +0100
    87.2 +++ b/indra/newview/skins/default/xui/ru/panel_preferences_UI.xml	Wed Nov 29 23:04:58 2017 +0100
    87.3 @@ -203,14 +203,14 @@
    87.4          </text>
    87.5          <text name="tooltip_textbox4">
    87.6            пикселей (необходим перезапуск)
    87.7 -V2/3 по умолчанию 0. V1 по умолчанию 2.
    87.8 +[VIEWER_GENERATION] по умолчанию 0. V1 по умолчанию 2.
    87.9          </text>
   87.10          <text name="Label_FolderItemViewHeight">
   87.11             Высота папок:
   87.12          </text>
   87.13          <text name="Label_FolderItemViewHeight_Scale">
   87.14            пикселей (необходим перезапуск)
   87.15 -V2/3 по умолчанию 20. V1 по умолчанию 18.
   87.16 +[VIEWER_GENERATION] по умолчанию 20. V1 по умолчанию 18.
   87.17          </text>
   87.18      </panel>
   87.19  </tab_container>
    88.1 --- a/indra/newview/skins/starlight/xui/en/floater_tools.xml	Wed Nov 29 23:04:31 2017 +0100
    88.2 +++ b/indra/newview/skins/starlight/xui/en/floater_tools.xml	Wed Nov 29 23:04:58 2017 +0100
    88.3 @@ -393,15 +393,12 @@
    88.4       width="134" />
    88.5    <check_box
    88.6       height="18"
    88.7 -     initial_value="true"
    88.8 +     control_name="RenderHighlightSelections"
    88.9       label="Show Highlight"
   88.10       layout="topleft"
   88.11       top_pad="-2"
   88.12       name="checkbox show highlight"
   88.13 -     width="134" >
   88.14 -     <check_box.commit_callback
   88.15 -         function="BuildTool.commitShowHighlight"/>
   88.16 -    </check_box>
   88.17 +     width="134"/>
   88.18      <button
   88.19       left_pad="0"
   88.20       image_selected="ForwardArrow_Press"
    89.1 --- a/indra/newview/skins/starlightcui/xui/en/floater_tools.xml	Wed Nov 29 23:04:31 2017 +0100
    89.2 +++ b/indra/newview/skins/starlightcui/xui/en/floater_tools.xml	Wed Nov 29 23:04:58 2017 +0100
    89.3 @@ -393,15 +393,12 @@
    89.4       width="134" />
    89.5    <check_box
    89.6       height="18"
    89.7 -     initial_value="true"
    89.8 +     control_name="RenderHighlightSelections"
    89.9       label="Show Highlight"
   89.10       layout="topleft"
   89.11       top_pad="-2"
   89.12       name="checkbox show highlight"
   89.13 -     width="134" >
   89.14 -     <check_box.commit_callback
   89.15 -         function="BuildTool.commitShowHighlight"/>
   89.16 -    </check_box>
   89.17 +     width="134"/>
   89.18      <button
   89.19       left_pad="0"
   89.20       image_selected="ForwardArrow_Press"
    90.1 --- a/indra/newview/skins/vintage/xui/en/floater_tools.xml	Wed Nov 29 23:04:31 2017 +0100
    90.2 +++ b/indra/newview/skins/vintage/xui/en/floater_tools.xml	Wed Nov 29 23:04:58 2017 +0100
    90.3 @@ -395,15 +395,12 @@
    90.4       width="134" />
    90.5    <check_box
    90.6       height="18"
    90.7 -     initial_value="true"
    90.8 +     control_name="RenderHighlightSelections"
    90.9       label="Show Highlight"
   90.10       layout="topleft"
   90.11       top_pad="-2"
   90.12       name="checkbox show highlight"
   90.13 -     width="134" >
   90.14 -     <check_box.commit_callback
   90.15 -         function="BuildTool.commitShowHighlight"/>
   90.16 -    </check_box>
   90.17 +     width="134"/>
   90.18      <button
   90.19       left_pad="0"
   90.20       layout="topleft"

mercurial