Merge. Refresh from viewer-release after 3.7.0 release

Tue, 11 Feb 2014 13:41:31 -0500

author
Monty Brandenberg <monty@lindenlab.com>
date
Tue, 11 Feb 2014 13:41:31 -0500
changeset 40746
f7a37d5509f9
parent 40745
8594bd93e6d9
parent 40570
e996a0715a13
child 40747
b842534cb4d7
child 40758
2a17f37517e8

Merge. Refresh from viewer-release after 3.7.0 release

indra/newview/app_settings/settings.xml file | annotate | diff | revisions
     1.1 --- a/.hgtags	Thu Jan 30 13:17:17 2014 -0500
     1.2 +++ b/.hgtags	Tue Feb 11 13:41:31 2014 -0500
     1.3 @@ -472,3 +472,4 @@
     1.4  2feb70a4cfde43f2898d95ff8fcae3e67805c7c2 3.6.11-release
     1.5  88bbfd7a6971033f3aa103f3a3500ceb4c73521b 3.6.12-release
     1.6  0d9b9e50f1a8880e05f15688a9ec7d09e0e81013 3.6.13-release
     1.7 +5d746de933a98ca17887cde2fece80e9c7ab0b98 3.7.0-release
     2.1 --- a/build.sh	Thu Jan 30 13:17:17 2014 -0500
     2.2 +++ b/build.sh	Tue Feb 11 13:41:31 2014 -0500
     2.3 @@ -401,6 +401,7 @@
     2.4          if [ x"$package" != x ]
     2.5          then
     2.6            upload_item installer "$package" binary/octet-stream
     2.7 +          upload_item quicklink "$package" binary/octet-stream
     2.8          else
     2.9            record_failure "Failed to find additional package for '$package_id'."
    2.10          fi
    2.11 @@ -414,6 +415,12 @@
    2.12            upload_item symbolfile "$build_dir/$symbolfile" binary/octet-stream
    2.13          done
    2.14  
    2.15 +        # Upload the actual dependencies used
    2.16 +        if [ -r "$build_dir/packages/installed-packages.xml" ]
    2.17 +        then
    2.18 +            upload_item installer "$build_dir/packages/installed-packages.xml" text/xml
    2.19 +        fi
    2.20 +
    2.21          # Upload the llphysicsextensions_tpv package, if one was produced
    2.22          # *TODO: Make this an upload-extension
    2.23          if [ -r "$build_dir/llphysicsextensions_package" ]
     3.1 --- a/doc/contributions.txt	Thu Jan 30 13:17:17 2014 -0500
     3.2 +++ b/doc/contributions.txt	Tue Feb 11 13:41:31 2014 -0500
     3.3 @@ -180,6 +180,9 @@
     3.4  	MAINT-2368
     3.5  	STORM-1931
     3.6  	MAINT-2773
     3.7 +	BUG-3764
     3.8 +	STORM-1984
     3.9 +	STORM-1979
    3.10  Aralara Rajal
    3.11  Arare Chantilly
    3.12  	CHUIBUG-191
    3.13 @@ -307,6 +310,7 @@
    3.14  Ciaran Laval
    3.15  Cinder Roxley
    3.16      BUG-2326
    3.17 +    BUG-3863
    3.18      OPEN-185
    3.19      STORM-1703
    3.20  	STORM-1948
    3.21 @@ -674,6 +678,19 @@
    3.22  	OPEN-161
    3.23  	STORM-1953
    3.24  	STORM-1957
    3.25 +	STORM-1993
    3.26 +	STORM-1980
    3.27 +	OPEN-113
    3.28 +	STORM-1975
    3.29 +	STORM-1982
    3.30 +	STORM-1975
    3.31 +	STORM-1987
    3.32 +	STORM-1982
    3.33 +	STORM-1992
    3.34 +	STORM-1989
    3.35 +	STORM-1987
    3.36 +	STORM-1986
    3.37 +	STORM-1981
    3.38  Kadah Coba
    3.39  	STORM-1060
    3.40      STORM-1843
    3.41 @@ -1140,6 +1157,7 @@
    3.42  Sovereign Engineer
    3.43      MAINT-2334
    3.44      OPEN-189
    3.45 +    OPEN-195
    3.46  SpacedOut Frye
    3.47  	VWR-34
    3.48  	VWR-45
    3.49 @@ -1259,6 +1277,8 @@
    3.50  Tony Kembia
    3.51  Tonya Souther
    3.52  	STORM-1905
    3.53 +	BUG-3875
    3.54 +	BUG-3968
    3.55  Torben Trautman
    3.56  TouchaHoney Perhaps
    3.57  TraductoresAnonimos Alter
     4.1 --- a/indra/lib/python/indra/base/lluuid.py	Thu Jan 30 13:17:17 2014 -0500
     4.2 +++ b/indra/lib/python/indra/base/lluuid.py	Tue Feb 11 13:41:31 2014 -0500
     4.3 @@ -72,7 +72,7 @@
     4.4      ip = ''
     4.5      try:
     4.6          ip = socket.gethostbyname(socket.gethostname())
     4.7 -    except(socket.gaierror):
     4.8 +    except(socket.gaierror, socket.error):
     4.9          # no ip address, so just default to somewhere in 10.x.x.x
    4.10          ip = '10'
    4.11          for i in range(3):
     5.1 --- a/indra/llaudio/llaudiodecodemgr.cpp	Thu Jan 30 13:17:17 2014 -0500
     5.2 +++ b/indra/llaudio/llaudiodecodemgr.cpp	Tue Feb 11 13:41:31 2014 -0500
     5.3 @@ -135,7 +135,7 @@
     5.4  		origin = -1;
     5.5  		break;
     5.6  	default:
     5.7 -		llerrs << "Invalid whence argument to vfs_seek" << llendl;
     5.8 +		LL_ERRS("AudioEngine") << "Invalid whence argument to vfs_seek" << LL_ENDL;
     5.9  		return -1;
    5.10  	}
    5.11  
    5.12 @@ -197,12 +197,12 @@
    5.13  	vfs_callbacks.close_func = vfs_close;
    5.14  	vfs_callbacks.tell_func = vfs_tell;
    5.15  
    5.16 -	//llinfos << "Initing decode from vfile: " << mUUID << llendl;
    5.17 +	LL_DEBUGS("AudioEngine") << "Initing decode from vfile: " << mUUID << LL_ENDL;
    5.18  
    5.19  	mInFilep = new LLVFile(gVFS, mUUID, LLAssetType::AT_SOUND);
    5.20  	if (!mInFilep || !mInFilep->getSize())
    5.21  	{
    5.22 -		llwarns << "unable to open vorbis source vfile for reading" << llendl;
    5.23 +		LL_WARNS("AudioEngine") << "unable to open vorbis source vfile for reading" << LL_ENDL;
    5.24  		delete mInFilep;
    5.25  		mInFilep = NULL;
    5.26  		return FALSE;
    5.27 @@ -211,7 +211,7 @@
    5.28  	int r = ov_open_callbacks(mInFilep, &mVF, NULL, 0, vfs_callbacks);
    5.29  	if(r < 0) 
    5.30  	{
    5.31 -		llwarns << r << " Input to vorbis decode does not appear to be an Ogg bitstream: " << mUUID << llendl;
    5.32 +		LL_WARNS("AudioEngine") << r << " Input to vorbis decode does not appear to be an Ogg bitstream: " << mUUID << LL_ENDL;
    5.33  		return(FALSE);
    5.34  	}
    5.35  	
    5.36 @@ -229,36 +229,36 @@
    5.37  		if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS )
    5.38  		{
    5.39  			abort_decode = true;
    5.40 -			llwarns << "Bad channel count: " << vi->channels << llendl;
    5.41 +			LL_WARNS("AudioEngine") << "Bad channel count: " << vi->channels << LL_ENDL;
    5.42  		}
    5.43  	}
    5.44  	else // !vi
    5.45  	{
    5.46  		abort_decode = true;
    5.47 -		llwarns << "No default bitstream found" << llendl;	
    5.48 +		LL_WARNS("AudioEngine") << "No default bitstream found" << LL_ENDL;	
    5.49  	}
    5.50  	
    5.51  	if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES ||
    5.52  	    (size_t)sample_count <= 0)
    5.53  	{
    5.54  		abort_decode = true;
    5.55 -		llwarns << "Illegal sample count: " << sample_count << llendl;
    5.56 +		LL_WARNS("AudioEngine") << "Illegal sample count: " << sample_count << LL_ENDL;
    5.57  	}
    5.58  	
    5.59  	if( size_guess > LLVORBIS_CLIP_REJECT_SIZE ||
    5.60  	    size_guess < 0)
    5.61  	{
    5.62  		abort_decode = true;
    5.63 -		llwarns << "Illegal sample size: " << size_guess << llendl;
    5.64 +		LL_WARNS("AudioEngine") << "Illegal sample size: " << size_guess << LL_ENDL;
    5.65  	}
    5.66  	
    5.67  	if( abort_decode )
    5.68  	{
    5.69 -		llwarns << "Canceling initDecode. Bad asset: " << mUUID << llendl;
    5.70 +		LL_WARNS("AudioEngine") << "Canceling initDecode. Bad asset: " << mUUID << LL_ENDL;
    5.71  		vorbis_comment* comment = ov_comment(&mVF,-1);
    5.72  		if (comment && comment->vendor)
    5.73  		{
    5.74 -			llwarns << "Bad asset encoded by: " << comment->vendor << llendl;
    5.75 +			LL_WARNS("AudioEngine") << "Bad asset encoded by: " << comment->vendor << LL_ENDL;
    5.76  		}
    5.77  		delete mInFilep;
    5.78  		mInFilep = NULL;
    5.79 @@ -359,12 +359,12 @@
    5.80  {
    5.81  	if (!mInFilep)
    5.82  	{
    5.83 -		llwarns << "No VFS file to decode in vorbis!" << llendl;
    5.84 +		LL_WARNS("AudioEngine") << "No VFS file to decode in vorbis!" << LL_ENDL;
    5.85  		return TRUE;
    5.86  	}
    5.87  	if (mDone)
    5.88  	{
    5.89 -// 		llwarns << "Already done with decode, aborting!" << llendl;
    5.90 +// 		LL_WARNS("AudioEngine") << "Already done with decode, aborting!" << LL_ENDL;
    5.91  		return TRUE;
    5.92  	}
    5.93  	char pcmout[4096];	/*Flawfinder: ignore*/
    5.94 @@ -377,14 +377,14 @@
    5.95  		eof = TRUE;
    5.96  		mDone = TRUE;
    5.97  		mValid = TRUE;
    5.98 -//			llinfos << "Vorbis EOF" << llendl;
    5.99 +//			LL_INFOS("AudioEngine") << "Vorbis EOF" << LL_ENDL;
   5.100  	}
   5.101  	else if (ret < 0)
   5.102  	{
   5.103  		/* error in the stream.  Not a problem, just reporting it in
   5.104  		   case we (the app) cares.  In this case, we don't. */
   5.105  
   5.106 -		llwarns << "BAD vorbis decode in decodeSection." << llendl;
   5.107 +		LL_WARNS("AudioEngine") << "BAD vorbis decode in decodeSection." << LL_ENDL;
   5.108  
   5.109  		mValid = FALSE;
   5.110  		mDone = TRUE;
   5.111 @@ -393,7 +393,7 @@
   5.112  	}
   5.113  	else
   5.114  	{
   5.115 -//			llinfos << "Vorbis read " << ret << "bytes" << llendl;
   5.116 +//			LL_INFOS("AudioEngine") << "Vorbis read " << ret << "bytes" << LL_ENDL;
   5.117  		/* we don't bother dealing with sample rate changes, etc, but.
   5.118  		   you'll have to*/
   5.119  		std::copy(pcmout, pcmout+ret, std::back_inserter(mWAVBuffer));
   5.120 @@ -405,7 +405,7 @@
   5.121  {
   5.122  	if (!isValid())
   5.123  	{
   5.124 -		llwarns << "Bogus vorbis decode state for " << getUUID() << ", aborting!" << llendl;
   5.125 +		LL_WARNS("AudioEngine") << "Bogus vorbis decode state for " << getUUID() << ", aborting!" << LL_ENDL;
   5.126  		return TRUE; // We've finished
   5.127  	}
   5.128  
   5.129 @@ -480,7 +480,7 @@
   5.130  
   5.131  		if (36 == data_length)
   5.132  		{
   5.133 -			llwarns << "BAD Vorbis decode in finishDecode!" << llendl;
   5.134 +			LL_WARNS("AudioEngine") << "BAD Vorbis decode in finishDecode!" << LL_ENDL;
   5.135  			mValid = FALSE;
   5.136  			return TRUE; // we've finished
   5.137  		}
   5.138 @@ -497,7 +497,7 @@
   5.139  		{
   5.140  			if (mBytesRead == 0)
   5.141  			{
   5.142 -				llwarns << "Unable to write file in LLVorbisDecodeState::finishDecode" << llendl;
   5.143 +				LL_WARNS("AudioEngine") << "Unable to write file in LLVorbisDecodeState::finishDecode" << LL_ENDL;
   5.144  				mValid = FALSE;
   5.145  				return TRUE; // we've finished
   5.146  			}
   5.147 @@ -515,7 +515,7 @@
   5.148  	LLVFile output(gVFS, mUUID, LLAssetType::AT_SOUND_WAV);
   5.149  	output.write(&mWAVBuffer[0], mWAVBuffer.size());
   5.150  #endif
   5.151 -	//llinfos << "Finished decode for " << getUUID() << llendl;
   5.152 +	LL_DEBUGS("AudioEngine") << "Finished decode for " << getUUID() << LL_ENDL;
   5.153  
   5.154  	return TRUE;
   5.155  }
   5.156 @@ -524,7 +524,7 @@
   5.157  {
   5.158  	if (mInFilep)
   5.159  	{
   5.160 -		llwarns << "Flushing bad vorbis file from VFS for " << mUUID << llendl;
   5.161 +		LL_WARNS("AudioEngine") << "Flushing bad vorbis file from VFS for " << mUUID << LL_ENDL;
   5.162  		mInFilep->remove();
   5.163  	}
   5.164  }
   5.165 @@ -568,7 +568,7 @@
   5.166  			if (mCurrentDecodep->isDone() && !mCurrentDecodep->isValid())
   5.167  			{
   5.168  				// We had an error when decoding, abort.
   5.169 -				llwarns << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << llendl;
   5.170 +				LL_WARNS("AudioEngine") << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << LL_ENDL;
   5.171  				mCurrentDecodep->flushBadFile();
   5.172  				LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID());
   5.173  				adp->setHasValidData(false);
   5.174 @@ -590,7 +590,7 @@
   5.175  					LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID());
   5.176  					if (!adp)
   5.177  					{
   5.178 -						llwarns << "Missing LLAudioData for decode of " << mCurrentDecodep->getUUID() << llendl;
   5.179 +						LL_WARNS("AudioEngine") << "Missing LLAudioData for decode of " << mCurrentDecodep->getUUID() << LL_ENDL;
   5.180  					}
   5.181  					else if (mCurrentDecodep->isValid() && mCurrentDecodep->isDone())
   5.182  					{
   5.183 @@ -601,12 +601,12 @@
   5.184  						// At this point, we could see if anyone needs this sound immediately, but
   5.185  						// I'm not sure that there's a reason to - we need to poll all of the playing
   5.186  						// sounds anyway.
   5.187 -						//llinfos << "Finished the vorbis decode, now what?" << llendl;
   5.188 +						//LL_INFOS("AudioEngine") << "Finished the vorbis decode, now what?" << LL_ENDL;
   5.189  					}
   5.190  					else
   5.191  					{
   5.192  						adp->setHasCompletedDecode(true);
   5.193 -						llinfos << "Vorbis decode failed for " << mCurrentDecodep->getUUID() << llendl;
   5.194 +						LL_INFOS("AudioEngine") << "Vorbis decode failed for " << mCurrentDecodep->getUUID() << LL_ENDL;
   5.195  					}
   5.196  					mCurrentDecodep = NULL;
   5.197  				}
   5.198 @@ -631,7 +631,7 @@
   5.199  					continue;
   5.200  				}
   5.201  
   5.202 -				lldebugs << "Decoding " << uuid << " from audio queue!" << llendl;
   5.203 +				lldebugs << "Decoding " << uuid << " from audio queue!" << LL_ENDL;
   5.204  
   5.205  				std::string uuid_str;
   5.206  				std::string d_path;
   5.207 @@ -674,19 +674,19 @@
   5.208  	if (gAudiop->hasDecodedFile(uuid))
   5.209  	{
   5.210  		// Already have a decoded version, don't need to decode it.
   5.211 -		//llinfos << "addDecodeRequest for " << uuid << " has decoded file already" << llendl;
   5.212 +		LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has decoded file already" << LL_ENDL;
   5.213  		return TRUE;
   5.214  	}
   5.215  
   5.216  	if (gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))
   5.217  	{
   5.218  		// Just put it on the decode queue.
   5.219 -		//llinfos << "addDecodeRequest for " << uuid << " has local asset file already" << llendl;
   5.220 +		LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has local asset file already" << LL_ENDL;
   5.221  		mImpl->mDecodeQueue.push(uuid);
   5.222  		return TRUE;
   5.223  	}
   5.224  
   5.225 -	//llinfos << "addDecodeRequest for " << uuid << " no file available" << llendl;
   5.226 +	LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " no file available" << LL_ENDL;
   5.227  	return FALSE;
   5.228  }
   5.229  
     6.1 --- a/indra/llaudio/llaudioengine.cpp	Thu Jan 30 13:17:17 2014 -0500
     6.2 +++ b/indra/llaudio/llaudioengine.cpp	Tue Feb 11 13:41:31 2014 -0500
     6.3 @@ -123,7 +123,7 @@
     6.4  	// Initialize the decode manager
     6.5  	gAudioDecodeMgrp = new LLAudioDecodeMgr;
     6.6  
     6.7 -	llinfos << "LLAudioEngine::init() AudioEngine successfully initialized" << llendl;
     6.8 +	LL_INFOS("AudioEngine") << "LLAudioEngine::init() AudioEngine successfully initialized" << LL_ENDL;
     6.9  
    6.10  	return true;
    6.11  }
    6.12 @@ -308,7 +308,7 @@
    6.13  		LLAudioChannel *channelp = getFreeChannel(max_priority);
    6.14  		if (channelp)
    6.15  		{
    6.16 -			//llinfos << "Replacing source in channel due to priority!" << llendl;
    6.17 +			LL_DEBUGS("AudioEngine") << "Replacing source in channel due to priority!" << LL_ENDL;
    6.18  			max_sourcep->setChannel(channelp);
    6.19  			channelp->setSource(max_sourcep);
    6.20  			if (max_sourcep->isSyncSlave())
    6.21 @@ -479,7 +479,7 @@
    6.22  		{
    6.23  			if (!mBuffers[i]->mInUse && mBuffers[i]->mLastUseTimer.getElapsedTimeF32() > 30.f)
    6.24  			{
    6.25 -				//llinfos << "Flushing unused buffer!" << llendl;
    6.26 +				LL_DEBUGS("AudioEngine") << "Flushing unused buffer!" << LL_ENDL;
    6.27  				mBuffers[i]->mAudioDatap->mBufferp = NULL;
    6.28  				delete mBuffers[i];
    6.29  				mBuffers[i] = NULL;
    6.30 @@ -591,8 +591,8 @@
    6.31  
    6.32  	if (buffer_id >= 0)
    6.33  	{
    6.34 -		lldebugs << "Taking over unused buffer " << buffer_id << llendl;
    6.35 -		//llinfos << "Flushing unused buffer!" << llendl;
    6.36 +		lldebugs << "Taking over unused buffer " << buffer_id << LL_ENDL;
    6.37 +		LL_DEBUGS("AudioEngine") << "Flushing unused buffer!" << LL_ENDL;
    6.38  		mBuffers[buffer_id]->mAudioDatap->mBufferp = NULL;
    6.39  		delete mBuffers[buffer_id];
    6.40  		mBuffers[buffer_id] = createBuffer();
    6.41 @@ -673,6 +673,8 @@
    6.42  
    6.43  bool LLAudioEngine::preloadSound(const LLUUID &uuid)
    6.44  {
    6.45 +	LL_DEBUGS("AudioEngine")<<"( "<<uuid<<" )"<<LL_ENDL;
    6.46 +	
    6.47  	gAudiop->getAudioData(uuid);	// We don't care about the return value, this is just to make sure
    6.48  									// that we have an entry, which will mean that the audio engine knows about this
    6.49  
    6.50 @@ -684,7 +686,7 @@
    6.51  
    6.52  	// At some point we need to have the audio/asset system check the static VFS
    6.53  	// before it goes off and fetches stuff from the server.
    6.54 -	//llwarns << "Used internal preload for non-local sound" << llendl;
    6.55 +	LL_DEBUGS("AudioEngine") << "Used internal preload for non-local sound "<< uuid << LL_ENDL;
    6.56  	return false;
    6.57  }
    6.58  
    6.59 @@ -815,7 +817,7 @@
    6.60  								 const S32 type, const LLVector3d &pos_global)
    6.61  {
    6.62  	// Create a new source (since this can't be associated with an existing source.
    6.63 -	//llinfos << "Localized: " << audio_uuid << llendl;
    6.64 +	LL_DEBUGS("AudioEngine") << "Localized: " << audio_uuid << LL_ENDL;
    6.65  
    6.66  	if (mMuted)
    6.67  	{
    6.68 @@ -982,11 +984,14 @@
    6.69  	iter = mAllSources.find(asp->getID());
    6.70  	if (iter == mAllSources.end())
    6.71  	{
    6.72 -		llwarns << "Cleaning up unknown audio source!" << llendl;
    6.73 -		return;
    6.74 +		LL_WARNS("AudioEngine") << "Cleaning up unknown audio source!" << LL_ENDL;
    6.75  	}
    6.76 -	delete asp;
    6.77 -	mAllSources.erase(iter);
    6.78 +	else
    6.79 +	{
    6.80 +		LL_DEBUGS("AudioEngine") << "Cleaning up audio sources for "<< asp->getID() <<LL_ENDL;
    6.81 +		delete asp;
    6.82 +		mAllSources.erase(iter);
    6.83 +	}
    6.84  }
    6.85  
    6.86  
    6.87 @@ -1013,16 +1018,18 @@
    6.88  bool LLAudioEngine::hasLocalFile(const LLUUID &uuid)
    6.89  {
    6.90  	// See if it's in the VFS.
    6.91 -	return gVFS->getExists(uuid, LLAssetType::AT_SOUND);
    6.92 +	bool have_local = gVFS->getExists(uuid, LLAssetType::AT_SOUND);
    6.93 +	LL_DEBUGS("AudioEngine") << "sound uuid "<<uuid<<" exists in VFS"<<LL_ENDL;
    6.94 +	return have_local;
    6.95  }
    6.96  
    6.97  
    6.98  void LLAudioEngine::startNextTransfer()
    6.99  {
   6.100 -	//llinfos << "LLAudioEngine::startNextTransfer()" << llendl;
   6.101 +	//LL_DEBUGS("AudioEngine") << "LLAudioEngine::startNextTransfer()" << LL_ENDL;
   6.102  	if (mCurrentTransfer.notNull() || getMuted())
   6.103  	{
   6.104 -		//llinfos << "Transfer in progress, aborting" << llendl;
   6.105 +		//LL_DEBUGS("AudioEngine") << "Transfer in progress, aborting" << LL_ENDL;
   6.106  		return;
   6.107  	}
   6.108  
   6.109 @@ -1203,7 +1210,7 @@
   6.110  
   6.111  	if (asset_id.notNull())
   6.112  	{
   6.113 -		llinfos << "Getting asset data for: " << asset_id << llendl;
   6.114 +		LL_INFOS("AudioEngine") << "Getting audio asset data for: " << asset_id << LL_ENDL;
   6.115  		gAudiop->mCurrentTransfer = asset_id;
   6.116  		gAudiop->mCurrentTransferTimer.reset();
   6.117  		gAssetStorage->getAssetData(asset_id, LLAssetType::AT_SOUND,
   6.118 @@ -1211,7 +1218,7 @@
   6.119  	}
   6.120  	else
   6.121  	{
   6.122 -		//llinfos << "No pending transfers?" << llendl;
   6.123 +		//LL_DEBUGS("AudioEngine") << "No pending transfers?" << LL_ENDL;
   6.124  	}
   6.125  }
   6.126  
   6.127 @@ -1221,7 +1228,7 @@
   6.128  {
   6.129  	if (result_code)
   6.130  	{
   6.131 -		llinfos << "Boom, error in audio file transfer: " << LLAssetStorage::getErrorString( result_code ) << " (" << result_code << ")" << llendl;
   6.132 +		LL_INFOS("AudioEngine") << "Boom, error in audio file transfer: " << LLAssetStorage::getErrorString( result_code ) << " (" << result_code << ")" << LL_ENDL;
   6.133  		// Need to mark data as bad to avoid constant rerequests.
   6.134  		LLAudioData *adp = gAudiop->getAudioData(uuid);
   6.135  		if (adp)
   6.136 @@ -1238,11 +1245,11 @@
   6.137  		if (!adp)
   6.138          {
   6.139  			// Should never happen
   6.140 -			llwarns << "Got asset callback without audio data for " << uuid << llendl;
   6.141 +			LL_WARNS("AudioEngine") << "Got asset callback without audio data for " << uuid << LL_ENDL;
   6.142          }
   6.143  		else
   6.144  		{
   6.145 -			// llinfos << "Got asset callback with good audio data for " << uuid << ", making decode request" << llendl;
   6.146 +			LL_DEBUGS("AudioEngine") << "Got asset callback with good audio data for " << uuid << ", making decode request" << LL_ENDL;
   6.147  			adp->setHasValidData(true);
   6.148  		    adp->setHasLocalData(true);
   6.149  		    gAudioDecodeMgrp->addDecodeRequest(uuid);
   6.150 @@ -1321,7 +1328,7 @@
   6.151  			}
   6.152  			else if (adp->hasCompletedDecode())		// Only mark corrupted after decode is done
   6.153  			{
   6.154 -				llwarns << "Marking LLAudioSource corrupted for " << adp->getID() << llendl;
   6.155 +				LL_WARNS("AudioEngine") << "Marking LLAudioSource corrupted for " << adp->getID() << LL_ENDL;
   6.156  				mCorrupted = true ;
   6.157  			}
   6.158  		}
   6.159 @@ -1357,7 +1364,6 @@
   6.160  	if (!adp->getBuffer())
   6.161  	{
   6.162  		// We're not ready to play back the sound yet, so don't try and allocate a channel for it.
   6.163 -		//llwarns << "Aborting, no buffer" << llendl;
   6.164  		return false;
   6.165  	}
   6.166  
   6.167 @@ -1375,7 +1381,7 @@
   6.168  		// Ugh, we don't have any free channels.
   6.169  		// Now we have to reprioritize.
   6.170  		// For now, just don't play the sound.
   6.171 -		//llwarns << "Aborting, no free channels" << llendl;
   6.172 +		//llwarns << "Aborting, no free channels" << LL_ENDL;
   6.173  		return false;
   6.174  	}
   6.175  
   6.176 @@ -1474,7 +1480,7 @@
   6.177  		{
   6.178  			// We don't have a channel assigned, and it's been
   6.179  			// over 15 seconds since we tried to play it.  Don't bother.
   6.180 -			//llinfos << "No channel assigned, source is done" << llendl;
   6.181 +			LL_DEBUGS("AudioEngine") << "No channel assigned, source is done" << LL_ENDL;
   6.182  			return true;
   6.183  		}
   6.184  		else
   6.185 @@ -1640,7 +1646,7 @@
   6.186  LLAudioChannel::~LLAudioChannel()
   6.187  {
   6.188  	// Need to disconnect any sources which are using this channel.
   6.189 -	//llinfos << "Cleaning up audio channel" << llendl;
   6.190 +	LL_DEBUGS("AudioEngine") << "Cleaning up audio channel" << LL_ENDL;
   6.191  	if (mCurrentSourcep)
   6.192  	{
   6.193  		mCurrentSourcep->setChannel(NULL);
   6.194 @@ -1651,29 +1657,29 @@
   6.195  
   6.196  void LLAudioChannel::setSource(LLAudioSource *sourcep)
   6.197  {
   6.198 -	//llinfos << this << ": setSource(" << sourcep << ")" << llendl;
   6.199 -
   6.200  	if (!sourcep)
   6.201  	{
   6.202  		// Clearing the source for this channel, don't need to do anything.
   6.203 -		//llinfos << "Clearing source for channel" << llendl;
   6.204 +		LL_DEBUGS("AudioEngine") << "Clearing source" << ( mCurrentSourcep ? mCurrentSourcep->getID() : LLUUID::null ) << LL_ENDL;
   6.205  		cleanup();
   6.206  		mCurrentSourcep = NULL;
   6.207  		mWaiting = false;
   6.208 -		return;
   6.209  	}
   6.210 +	else
   6.211 +	{
   6.212 +		LL_DEBUGS("AudioEngine") << "( id: " << sourcep->getID() << ")" << LL_ENDL;
   6.213  
   6.214 -	if (sourcep == mCurrentSourcep)
   6.215 -	{
   6.216 -		// Don't reallocate the channel, this will make FMOD goofy.
   6.217 -		//llinfos << "Calling setSource with same source!" << llendl;
   6.218 +		if (sourcep == mCurrentSourcep)
   6.219 +		{
   6.220 +			// Don't reallocate the channel, this will make FMOD goofy.
   6.221 +			//LL_DEBUGS("AudioEngine") << "Calling setSource with same source!" << LL_ENDL;
   6.222 +		}
   6.223 +
   6.224 +		mCurrentSourcep = sourcep;
   6.225 +		
   6.226 +		updateBuffer();
   6.227 +		update3DPosition();
   6.228  	}
   6.229 -
   6.230 -	mCurrentSourcep = sourcep;
   6.231 -
   6.232 -
   6.233 -	updateBuffer();
   6.234 -	update3DPosition();
   6.235  }
   6.236  
   6.237  
   6.238 @@ -1768,7 +1774,7 @@
   6.239  	if (mBufferp)
   6.240  	{
   6.241  		// We already have this sound in a buffer, don't do anything.
   6.242 -		llinfos << "Already have a buffer for this sound, don't bother loading!" << llendl;
   6.243 +		LL_INFOS("AudioEngine") << "Already have a buffer for this sound, don't bother loading!" << LL_ENDL;
   6.244  		return true;
   6.245  	}
   6.246  	
   6.247 @@ -1776,7 +1782,7 @@
   6.248  	if (!mBufferp)
   6.249  	{
   6.250  		// No free buffers, abort.
   6.251 -		llinfos << "Not able to allocate a new audio buffer, aborting." << llendl;
   6.252 +		LL_INFOS("AudioEngine") << "Not able to allocate a new audio buffer, aborting." << LL_ENDL;
   6.253  		return true;
   6.254  	}
   6.255  
     7.1 --- a/indra/llmath/llvolume.cpp	Thu Jan 30 13:17:17 2014 -0500
     7.2 +++ b/indra/llmath/llvolume.cpp	Tue Feb 11 13:41:31 2014 -0500
     7.3 @@ -6747,7 +6747,7 @@
     7.4  	return TRUE;
     7.5  }
     7.6  
     7.7 -//adapted from Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
     7.8 +//adapted from Lengyel, Eric. "Computing Tangent Space Basis Vectors for an Arbitrary Mesh". Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
     7.9  void CalculateTangentArray(U32 vertexCount, const LLVector4a *vertex, const LLVector4a *normal,
    7.10          const LLVector2 *texcoord, U32 triangleCount, const U16* index_array, LLVector4a *tangent)
    7.11  {
     8.1 --- a/indra/llrender/llglslshader.cpp	Thu Jan 30 13:17:17 2014 -0500
     8.2 +++ b/indra/llrender/llglslshader.cpp	Tue Feb 11 13:41:31 2014 -0500
     8.3 @@ -717,7 +717,14 @@
     8.4  
     8.5  BOOL LLGLSLShader::link(BOOL suppress_errors)
     8.6  {
     8.7 -	return LLShaderMgr::instance()->linkProgramObject(mProgramObject, suppress_errors);
     8.8 +	BOOL success = LLShaderMgr::instance()->linkProgramObject(mProgramObject, suppress_errors);
     8.9 +
    8.10 +	if (!suppress_errors)
    8.11 +	{
    8.12 +        LLShaderMgr::instance()->dumpObjectLog(mProgramObject, !success, mName);
    8.13 +	}
    8.14 +
    8.15 +	return success;
    8.16  }
    8.17  
    8.18  void LLGLSLShader::bind()
     9.1 --- a/indra/llrender/llshadermgr.cpp	Thu Jan 30 13:17:17 2014 -0500
     9.2 +++ b/indra/llrender/llshadermgr.cpp	Tue Feb 11 13:41:31 2014 -0500
     9.3 @@ -505,9 +505,25 @@
     9.4  	return res;
     9.5  }
     9.6  
     9.7 -void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns) 
     9.8 +void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns, const std::string& filename) 
     9.9  {
    9.10  	std::string log = get_object_log(ret);
    9.11 +
    9.12 +	if (log.length() > 0 || warns)
    9.13 +	{
    9.14 +		if (!filename.empty())
    9.15 +		{
    9.16 +			if (warns)
    9.17 +			{
    9.18 +				LL_WARNS("ShaderLoading") << "From " << filename << ":" << LL_ENDL;
    9.19 +			}
    9.20 +			else
    9.21 +			{
    9.22 +				LL_INFOS("ShaderLoading") << "From " << filename << ":" << LL_ENDL;
    9.23 +			}
    9.24 +		}
    9.25 +	}
    9.26 +
    9.27  	if ( log.length() > 0 )
    9.28  	{
    9.29  		if (warns)
    9.30 @@ -558,7 +574,7 @@
    9.31  		file = LLFile::fopen(fname.str(), "r");		/* Flawfinder: ignore */
    9.32  		if (file)
    9.33  		{
    9.34 -			LL_INFOS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL;
    9.35 +			LL_DEBUGS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL;
    9.36  			break; // done
    9.37  		}
    9.38  	}
    9.39 @@ -812,8 +828,8 @@
    9.40  			if (error != GL_NO_ERROR || success == GL_FALSE) 
    9.41  			{
    9.42  				//an error occured, print log
    9.43 -				LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
    9.44 -				dumpObjectLog(ret);
    9.45 +				LL_WARNS("ShaderLoading") << "GLSL Compilation Error:" << LL_ENDL;
    9.46 +				dumpObjectLog(ret, TRUE, filename);
    9.47  #if LL_WINDOWS
    9.48  				std::stringstream ostr;
    9.49  				//dump shader source for debugging
    9.50 @@ -938,11 +954,6 @@
    9.51  		suppress_errors = FALSE;
    9.52  	}
    9.53  #endif
    9.54 -	if (!suppress_errors)
    9.55 -	{
    9.56 -        dumpObjectLog(obj, !success);
    9.57 -	}
    9.58 -
    9.59  	return success;
    9.60  }
    9.61  
    9.62 @@ -1146,6 +1157,7 @@
    9.63  	mReservedUniforms.push_back("env_intensity");
    9.64  
    9.65  	mReservedUniforms.push_back("matrixPalette");
    9.66 +	mReservedUniforms.push_back("translationPalette");
    9.67  	
    9.68  	mReservedUniforms.push_back("screenTex");
    9.69  	mReservedUniforms.push_back("screenDepth");
    10.1 --- a/indra/llrender/llshadermgr.h	Thu Jan 30 13:17:17 2014 -0500
    10.2 +++ b/indra/llrender/llshadermgr.h	Tue Feb 11 13:41:31 2014 -0500
    10.3 @@ -176,6 +176,7 @@
    10.4  		ENVIRONMENT_INTENSITY,
    10.5  		
    10.6  		AVATAR_MATRIX,
    10.7 +		AVATAR_TRANSLATION,
    10.8  
    10.9  		WATER_SCREENTEX,
   10.10  		WATER_SCREENDEPTH,
   10.11 @@ -224,7 +225,7 @@
   10.12  	virtual void initAttribsAndUniforms(void);
   10.13  
   10.14  	BOOL attachShaderFeatures(LLGLSLShader * shader);
   10.15 -	void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE);
   10.16 +	void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE, const std::string& filename = "");
   10.17  	BOOL	linkProgramObject(GLhandleARB obj, BOOL suppress_errors = FALSE);
   10.18  	BOOL	validateProgramObject(GLhandleARB obj);
   10.19  	GLhandleARB loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, boost::unordered_map<std::string, std::string>* defines = NULL, S32 texture_index_channels = -1);
    11.1 --- a/indra/llui/llbutton.cpp	Thu Jan 30 13:17:17 2014 -0500
    11.2 +++ b/indra/llui/llbutton.cpp	Tue Feb 11 13:41:31 2014 -0500
    11.3 @@ -641,7 +641,7 @@
    11.4  	
    11.5  	bool use_glow_effect = FALSE;
    11.6  	LLColor4 highlighting_color = LLColor4::white;
    11.7 -	LLColor4 glow_color;
    11.8 +	LLColor4 glow_color = LLColor4::white;
    11.9  	LLRender::eBlendType glow_type = LLRender::BT_ADD_WITH_ALPHA;
   11.10  	LLUIImage* imagep = NULL;
   11.11  
    12.1 --- a/indra/llui/llcommandmanager.cpp	Thu Jan 30 13:17:17 2014 -0500
    12.2 +++ b/indra/llui/llcommandmanager.cpp	Tue Feb 11 13:41:31 2014 -0500
    12.3 @@ -50,8 +50,6 @@
    12.4  LLCommand::Params::Params()
    12.5  	: available_in_toybox("available_in_toybox", false)
    12.6  	, icon("icon")
    12.7 -	, hover_icon_unselected("hover_icon_unselected")
    12.8 -	, hover_icon_selected("hover_icon_selected")
    12.9  	, label_ref("label_ref")
   12.10  	, name("name")
   12.11  	, tooltip_ref("tooltip_ref")
   12.12 @@ -73,8 +71,6 @@
   12.13  	: mIdentifier(p.name)
   12.14  	, mAvailableInToybox(p.available_in_toybox)
   12.15  	, mIcon(p.icon)
   12.16 -	, mHoverIconUnselected(p.hover_icon_unselected)
   12.17 -	, mHoverIconSelected(p.hover_icon_selected)
   12.18  	, mLabelRef(p.label_ref)
   12.19  	, mName(p.name)
   12.20  	, mTooltipRef(p.tooltip_ref)
    13.1 --- a/indra/llui/llcommandmanager.h	Thu Jan 30 13:17:17 2014 -0500
    13.2 +++ b/indra/llui/llcommandmanager.h	Tue Feb 11 13:41:31 2014 -0500
    13.3 @@ -96,9 +96,6 @@
    13.4  		Mandatory<std::string>	name;
    13.5  		Mandatory<std::string>	tooltip_ref;
    13.6  
    13.7 -		Optional<std::string>   hover_icon_selected;
    13.8 -		Optional<std::string>   hover_icon_unselected;
    13.9 -
   13.10  		Mandatory<std::string>	execute_function;
   13.11  		Optional<LLSD>			execute_parameters;
   13.12  
   13.13 @@ -127,8 +124,6 @@
   13.14  	const std::string& labelRef() const { return mLabelRef; }
   13.15  	const std::string& name() const { return mName; }
   13.16  	const std::string& tooltipRef() const { return mTooltipRef; }
   13.17 -	const std::string& hoverIconUnselected() const {return mHoverIconUnselected; }
   13.18 -	const std::string& hoverIconSelected() const {return mHoverIconSelected; }
   13.19  
   13.20  	const std::string& executeFunctionName() const { return mExecuteFunction; }
   13.21  	const LLSD& executeParameters() const { return mExecuteParameters; }
   13.22 @@ -155,8 +150,6 @@
   13.23  	std::string mLabelRef;
   13.24  	std::string mName;
   13.25  	std::string mTooltipRef;
   13.26 -	std::string mHoverIconUnselected;
   13.27 -	std::string mHoverIconSelected;
   13.28  
   13.29  	std::string mExecuteFunction;
   13.30  	LLSD        mExecuteParameters;
    14.1 --- a/indra/llui/lltabcontainer.cpp	Thu Jan 30 13:17:17 2014 -0500
    14.2 +++ b/indra/llui/lltabcontainer.cpp	Tue Feb 11 13:41:31 2014 -0500
    14.3 @@ -193,15 +193,12 @@
    14.4  :	tab_top_image_unselected("tab_top_image_unselected"),
    14.5  	tab_top_image_selected("tab_top_image_selected"),
    14.6  	tab_top_image_flash("tab_top_image_flash"),
    14.7 -	tab_top_image_hovered("tab_top_image_hovered"),
    14.8  	tab_bottom_image_unselected("tab_bottom_image_unselected"),
    14.9  	tab_bottom_image_selected("tab_bottom_image_selected"),
   14.10  	tab_bottom_image_flash("tab_bottom_image_flash"),
   14.11 -	tab_bottom_image_hovered("tab_bottom_image_hovered"),
   14.12  	tab_left_image_unselected("tab_left_image_unselected"),
   14.13  	tab_left_image_selected("tab_left_image_selected"),
   14.14 -	tab_left_image_flash("tab_left_image_flash"),
   14.15 -	tab_left_image_hovered("tab_left_image_hovered")
   14.16 +	tab_left_image_flash("tab_left_image_flash")
   14.17  {}
   14.18  
   14.19  LLTabContainer::Params::Params()
   14.20 @@ -221,8 +218,7 @@
   14.21  	open_tabs_on_drag_and_drop("open_tabs_on_drag_and_drop", false),
   14.22  	tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0),
   14.23  	use_ellipses("use_ellipses"),
   14.24 -	font_halign("halign"),
   14.25 -	use_highlighting_on_hover("use_highlighting_on_hover",false)
   14.26 +	font_halign("halign")
   14.27  {}
   14.28  
   14.29  LLTabContainer::LLTabContainer(const LLTabContainer::Params& p)
   14.30 @@ -258,8 +254,7 @@
   14.31  	mCustomIconCtrlUsed(p.use_custom_icon_ctrl),
   14.32  	mOpenTabsOnDragAndDrop(p.open_tabs_on_drag_and_drop),
   14.33  	mTabIconCtrlPad(p.tab_icon_ctrl_pad),
   14.34 -	mUseTabEllipses(p.use_ellipses),
   14.35 -	mUseHighlightingOnHover(p.use_highlighting_on_hover)
   14.36 +	mUseTabEllipses(p.use_ellipses)
   14.37  {
   14.38  	static LLUICachedControl<S32> tabcntr_vert_tab_min_width ("UITabCntrVertTabMinWidth", 0);
   14.39  
   14.40 @@ -908,30 +903,18 @@
   14.41  			tuple->mButton->setImageUnselected(static_cast<LLUIImage*>(params.tab_top_image_unselected));
   14.42  			tuple->mButton->setImageSelected(static_cast<LLUIImage*>(params.tab_top_image_selected));
   14.43  			tuple->mButton->setImageFlash(static_cast<LLUIImage*>(params.tab_top_image_flash));
   14.44 -			if(mUseHighlightingOnHover)
   14.45 -			{
   14.46 -				tuple->mButton->setImageHoverUnselected(static_cast<LLUIImage*>(params.tab_top_image_hovered));
   14.47 -			}
   14.48  		}
   14.49  		else if (pos == LLTabContainer::BOTTOM)
   14.50  		{
   14.51  			tuple->mButton->setImageUnselected(static_cast<LLUIImage*>(params.tab_bottom_image_unselected));
   14.52  			tuple->mButton->setImageSelected(static_cast<LLUIImage*>(params.tab_bottom_image_selected));
   14.53  			tuple->mButton->setImageFlash(static_cast<LLUIImage*>(params.tab_bottom_image_flash));
   14.54 -			if(mUseHighlightingOnHover)
   14.55 -			{
   14.56 -				tuple->mButton->setImageHoverUnselected(static_cast<LLUIImage*>(params.tab_bottom_image_hovered));
   14.57 -			}
   14.58  		}
   14.59  		else if (pos == LLTabContainer::LEFT)
   14.60  		{
   14.61  			tuple->mButton->setImageUnselected(static_cast<LLUIImage*>(params.tab_left_image_unselected));
   14.62  			tuple->mButton->setImageSelected(static_cast<LLUIImage*>(params.tab_left_image_selected));
   14.63  			tuple->mButton->setImageFlash(static_cast<LLUIImage*>(params.tab_left_image_flash));
   14.64 -			if(mUseHighlightingOnHover)
   14.65 -			{
   14.66 -				tuple->mButton->setImageHoverUnselected(static_cast<LLUIImage*>(params.tab_left_image_hovered));
   14.67 -			}
   14.68  		}
   14.69  	}
   14.70  }
    15.1 --- a/indra/llui/lltabcontainer.h	Thu Jan 30 13:17:17 2014 -0500
    15.2 +++ b/indra/llui/lltabcontainer.h	Tue Feb 11 13:41:31 2014 -0500
    15.3 @@ -62,15 +62,12 @@
    15.4  		Optional<LLUIImage*>				tab_top_image_unselected,
    15.5  											tab_top_image_selected,
    15.6  											tab_top_image_flash,
    15.7 -											tab_top_image_hovered,
    15.8  											tab_bottom_image_unselected,
    15.9  											tab_bottom_image_selected,
   15.10  											tab_bottom_image_flash,
   15.11 -											tab_bottom_image_hovered,
   15.12  											tab_left_image_unselected,
   15.13  											tab_left_image_selected,
   15.14 -											tab_left_image_flash,
   15.15 -											tab_left_image_hovered;
   15.16 +											tab_left_image_flash;		
   15.17  		TabParams();
   15.18  	};
   15.19  
   15.20 @@ -117,11 +114,6 @@
   15.21  		 */
   15.22  		Optional<S32>						tab_icon_ctrl_pad;
   15.23  
   15.24 -		/**
   15.25 -		 *  This variable is used to found out should we highlight tab button on hover
   15.26 -		*/
   15.27 -		Optional<bool>						use_highlighting_on_hover;
   15.28 -
   15.29  		Params();
   15.30  	};
   15.31  
   15.32 @@ -315,7 +307,6 @@
   15.33  	bool							mOpenTabsOnDragAndDrop;
   15.34  	S32								mTabIconCtrlPad;
   15.35  	bool							mUseTabEllipses;
   15.36 -	bool                            mUseHighlightingOnHover;
   15.37  };
   15.38  
   15.39  #endif  // LL_TABCONTAINER_H
    16.1 --- a/indra/llui/lltoolbar.cpp	Thu Jan 30 13:17:17 2014 -0500
    16.2 +++ b/indra/llui/lltoolbar.cpp	Tue Feb 11 13:41:31 2014 -0500
    16.3 @@ -928,8 +928,6 @@
    16.4  	button_p.label = LLTrans::getString(commandp->labelRef());
    16.5  	button_p.tool_tip = LLTrans::getString(commandp->tooltipRef());
    16.6  	button_p.image_overlay = LLUI::getUIImage(commandp->icon());
    16.7 -	button_p.image_hover_unselected = LLUI::getUIImage(commandp->hoverIconUnselected());
    16.8 -	button_p.image_hover_selected = LLUI::getUIImage(commandp->hoverIconSelected());
    16.9  	button_p.button_flash_enable = commandp->isFlashingAllowed();
   16.10  	button_p.overwriteFrom(mButtonParams[mButtonType]);
   16.11  	LLToolBarButton* button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
    17.1 --- a/indra/llwindow/llopenglview-objc.mm	Thu Jan 30 13:17:17 2014 -0500
    17.2 +++ b/indra/llwindow/llopenglview-objc.mm	Tue Feb 11 13:41:31 2014 -0500
    17.3 @@ -376,13 +376,6 @@
    17.4          [[self inputContext] handleEvent:theEvent];
    17.5      }
    17.6      
    17.7 -    if ([[theEvent charactersIgnoringModifiers] characterAtIndex:0] == NSCarriageReturnCharacter ||
    17.8 -        [[theEvent charactersIgnoringModifiers] characterAtIndex:0] == NSEnterCharacter)
    17.9 -    {
   17.10 -        // callKeyDown won't return the value we expect for enter or return.  Handle them as a separate case.
   17.11 -        [[self inputContext] handleEvent:theEvent];
   17.12 -    }
   17.13 -    
   17.14      // OS X intentionally does not send us key-up information on cmd-key combinations.
   17.15      // This behaviour is not a bug, and only applies to cmd-combinations (no others).
   17.16      // Since SL assumes we receive those, we fake it here.
    18.1 --- a/indra/newview/CMakeLists.txt	Thu Jan 30 13:17:17 2014 -0500
    18.2 +++ b/indra/newview/CMakeLists.txt	Tue Feb 11 13:41:31 2014 -0500
    18.3 @@ -267,6 +267,7 @@
    18.4      llfloaterregiondebugconsole.cpp
    18.5      llfloaterregioninfo.cpp
    18.6      llfloaterreporter.cpp
    18.7 +    llfloaterregionrestarting.cpp
    18.8      llfloaterscriptdebug.cpp
    18.9      llfloaterscriptlimits.cpp
   18.10      llfloatersearch.cpp
   18.11 @@ -855,6 +856,7 @@
   18.12      llfloaterregiondebugconsole.h
   18.13      llfloaterregioninfo.h
   18.14      llfloaterreporter.h
   18.15 +    llfloaterregionrestarting.h
   18.16      llfloaterscriptdebug.h
   18.17      llfloaterscriptlimits.h
   18.18      llfloatersearch.h
    19.1 --- a/indra/newview/VIEWER_VERSION.txt	Thu Jan 30 13:17:17 2014 -0500
    19.2 +++ b/indra/newview/VIEWER_VERSION.txt	Tue Feb 11 13:41:31 2014 -0500
    19.3 @@ -1,1 +1,1 @@
    19.4 -3.6.14
    19.5 +3.7.1
    20.1 --- a/indra/newview/app_settings/commands.xml	Thu Jan 30 13:17:17 2014 -0500
    20.2 +++ b/indra/newview/app_settings/commands.xml	Tue Feb 11 13:41:31 2014 -0500
    20.3 @@ -3,8 +3,6 @@
    20.4    <command name="aboutland"
    20.5             available_in_toybox="true"
    20.6             icon="Command_AboutLand_Icon"
    20.7 -           hover_icon_unselected="Command_Highlighting_Icon"
    20.8 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
    20.9             label_ref="Command_AboutLand_Label"
   20.10             tooltip_ref="Command_AboutLand_Tooltip"
   20.11             execute_function="Floater.ToggleOrBringToFront"
   20.12 @@ -15,8 +13,6 @@
   20.13    <command name="appearance"  
   20.14             available_in_toybox="true"
   20.15             icon="Command_Appearance_Icon"
   20.16 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.17 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.18             label_ref="Command_Appearance_Label"
   20.19             tooltip_ref="Command_Appearance_Tooltip"
   20.20             execute_function="Floater.ToggleOrBringToFront"
   20.21 @@ -27,8 +23,6 @@
   20.22    <command name="avatar"
   20.23             available_in_toybox="true"
   20.24             icon="Command_Avatar_Icon"
   20.25 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.26 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.27             label_ref="Command_Avatar_Label"
   20.28             tooltip_ref="Command_Avatar_Tooltip"
   20.29             execute_function="Floater.ToggleOrBringToFront"
   20.30 @@ -39,8 +33,6 @@
   20.31    <command name="build"
   20.32             available_in_toybox="true"
   20.33             icon="Command_Build_Icon"
   20.34 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.35 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.36             label_ref="Command_Build_Label"
   20.37             tooltip_ref="Command_Build_Tooltip"
   20.38             execute_function="Build.Toggle"
   20.39 @@ -54,8 +46,6 @@
   20.40             available_in_toybox="true"
   20.41  		   is_flashing_allowed="true"
   20.42             icon="Command_Chat_Icon"
   20.43 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.44 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.45             label_ref="Command_Chat_Label"
   20.46             tooltip_ref="Command_Conversations_Tooltip"
   20.47             execute_function="Floater.ToggleOrBringToFront"
   20.48 @@ -66,8 +56,6 @@
   20.49    <command name="compass"
   20.50             available_in_toybox="false"
   20.51             icon="Command_Compass_Icon"
   20.52 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.53 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.54             label_ref="Command_Compass_Label"
   20.55             tooltip_ref="Command_Compass_Tooltip"
   20.56             execute_function="Floater.ToggleOrBringToFront"
   20.57 @@ -78,8 +66,6 @@
   20.58    <command name="destinations"
   20.59             available_in_toybox="true"
   20.60             icon="Command_Destinations_Icon"
   20.61 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.62 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.63             label_ref="Command_Destinations_Label"
   20.64             tooltip_ref="Command_Destinations_Tooltip"
   20.65             execute_function="Floater.ToggleOrBringToFront"
   20.66 @@ -90,8 +76,6 @@
   20.67    <command name="gestures"
   20.68             available_in_toybox="true"
   20.69             icon="Command_Gestures_Icon"
   20.70 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.71 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.72             label_ref="Command_Gestures_Label"
   20.73             tooltip_ref="Command_Gestures_Tooltip"
   20.74             execute_function="Floater.ToggleOrBringToFront"
   20.75 @@ -102,8 +86,6 @@
   20.76    <command name="howto"
   20.77             available_in_toybox="true"
   20.78             icon="Command_HowTo_Icon"
   20.79 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.80 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.81             label_ref="Command_HowTo_Label"
   20.82             tooltip_ref="Command_HowTo_Tooltip"
   20.83             execute_function="Help.ToggleHowTo"
   20.84 @@ -112,8 +94,6 @@
   20.85    <command name="inventory"
   20.86             available_in_toybox="true"
   20.87             icon="Command_Inventory_Icon"
   20.88 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.89 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.90             label_ref="Command_Inventory_Label"
   20.91             tooltip_ref="Command_Inventory_Tooltip"
   20.92             execute_function="Floater.ToggleOrBringToFront"
   20.93 @@ -124,8 +104,6 @@
   20.94    <command name="map"
   20.95             available_in_toybox="true"
   20.96             icon="Command_Map_Icon"
   20.97 -           hover_icon_unselected="Command_Highlighting_Icon"
   20.98 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
   20.99             label_ref="Command_Map_Label"
  20.100             tooltip_ref="Command_Map_Tooltip"
  20.101             execute_function="Floater.ToggleOrBringToFront"
  20.102 @@ -136,8 +114,6 @@
  20.103    <command name="marketplace"
  20.104             available_in_toybox="false"
  20.105             icon="Command_Marketplace_Icon"
  20.106 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.107 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.108             label_ref="Command_Marketplace_Label"
  20.109             tooltip_ref="Command_Marketplace_Tooltip"
  20.110             execute_function="Avatar.OpenMarketplace"
  20.111 @@ -145,8 +121,6 @@
  20.112    <command name="minimap"
  20.113             available_in_toybox="true"
  20.114             icon="Command_MiniMap_Icon"
  20.115 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.116 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.117             label_ref="Command_MiniMap_Label"
  20.118             tooltip_ref="Command_MiniMap_Tooltip"
  20.119             execute_function="Floater.ToggleOrBringToFront"
  20.120 @@ -157,8 +131,6 @@
  20.121    <command name="move"
  20.122             available_in_toybox="true"
  20.123             icon="Command_Move_Icon"
  20.124 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.125 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.126             label_ref="Command_Move_Label"
  20.127             tooltip_ref="Command_Move_Tooltip"
  20.128             execute_function="Floater.ToggleOrBringToFront"
  20.129 @@ -169,8 +141,6 @@
  20.130    <command name="outbox"
  20.131             available_in_toybox="false"
  20.132             icon="Command_Outbox_Icon"
  20.133 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.134 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.135             label_ref="Command_Outbox_Label"
  20.136             tooltip_ref="Command_Outbox_Tooltip"
  20.137             execute_function="Floater.ToggleOrBringToFront"
  20.138 @@ -181,8 +151,6 @@
  20.139    <command name="people"
  20.140             available_in_toybox="true"
  20.141             icon="Command_People_Icon"
  20.142 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.143 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.144             label_ref="Command_People_Label"
  20.145             tooltip_ref="Command_People_Tooltip"
  20.146             execute_function="Floater.ToggleOrBringToFront"
  20.147 @@ -193,8 +161,6 @@
  20.148    <command name="picks"
  20.149             available_in_toybox="true"
  20.150             icon="Command_Picks_Icon"
  20.151 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.152 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.153             label_ref="Command_Picks_Label"
  20.154             tooltip_ref="Command_Picks_Tooltip"
  20.155             execute_function="Floater.ToggleOrBringToFront"
  20.156 @@ -205,8 +171,6 @@
  20.157    <command name="places"
  20.158             available_in_toybox="true"
  20.159             icon="Command_Places_Icon"
  20.160 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.161 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.162             label_ref="Command_Places_Label"
  20.163             tooltip_ref="Command_Places_Tooltip"
  20.164             execute_function="Floater.ToggleOrBringToFront"
  20.165 @@ -217,8 +181,6 @@
  20.166    <command name="preferences"
  20.167             available_in_toybox="true"
  20.168             icon="Command_Preferences_Icon"
  20.169 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.170 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.171             label_ref="Command_Preferences_Label"
  20.172             tooltip_ref="Command_Preferences_Tooltip"
  20.173             execute_function="Floater.ToggleOrBringToFront"
  20.174 @@ -229,8 +191,6 @@
  20.175    <command name="profile"
  20.176             available_in_toybox="true"
  20.177             icon="Command_Profile_Icon"
  20.178 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.179 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.180             label_ref="Command_Profile_Label"
  20.181             tooltip_ref="Command_Profile_Tooltip"
  20.182             execute_function="Avatar.ToggleMyProfile"
  20.183 @@ -239,8 +199,6 @@
  20.184    <command name="search"
  20.185             available_in_toybox="true"
  20.186             icon="Command_Search_Icon"
  20.187 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.188 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.189             label_ref="Command_Search_Label"
  20.190             tooltip_ref="Command_Search_Tooltip"
  20.191             execute_function="Floater.ToggleOrBringToFront"
  20.192 @@ -251,8 +209,6 @@
  20.193    <command name="snapshot"
  20.194             available_in_toybox="true"
  20.195             icon="Command_Snapshot_Icon"
  20.196 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.197 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.198             label_ref="Command_Snapshot_Label"
  20.199             tooltip_ref="Command_Snapshot_Tooltip"
  20.200             execute_function="Floater.ToggleOrBringToFront"
  20.201 @@ -273,8 +229,6 @@
  20.202    <command name="speak"
  20.203             available_in_toybox="true"
  20.204             icon="Command_Speak_Icon"
  20.205 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.206 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.207             label_ref="Command_Speak_Label"
  20.208             tooltip_ref="Command_Speak_Tooltip"
  20.209             execute_function="Agent.PressMicrophone"
  20.210 @@ -289,8 +243,6 @@
  20.211    <command name="view"
  20.212             available_in_toybox="true"
  20.213             icon="Command_View_Icon"
  20.214 -           hover_icon_unselected="Command_Highlighting_Icon"
  20.215 -           hover_icon_selected="Command_Highlighting_Selected_Icon"
  20.216             label_ref="Command_View_Label"
  20.217             tooltip_ref="Command_View_Tooltip"
  20.218             execute_function="Floater.ToggleOrBringToFront"
    21.1 --- a/indra/newview/app_settings/settings.xml	Thu Jan 30 13:17:17 2014 -0500
    21.2 +++ b/indra/newview/app_settings/settings.xml	Tue Feb 11 13:41:31 2014 -0500
    21.3 @@ -12664,6 +12664,17 @@
    21.4        <key>Value</key>
    21.5        <string>00000000-0000-0000-0000-000000000000</string>
    21.6      </map>
    21.7 +    <key>UISndRestart</key>
    21.8 +    <map>
    21.9 +      <key>Comment</key>
   21.10 +      <string>Sound file for region restarting (uuid for sound asset)</string>
   21.11 +      <key>Persist</key>
   21.12 +      <integer>1</integer>
   21.13 +      <key>Type</key>
   21.14 +      <string>String</string>
   21.15 +      <key>Value</key>
   21.16 +      <string>b92a0f64-7709-8811-40c5-16afd624a45f</string>
   21.17 +    </map>
   21.18      <key>UISndSnapshot</key>
   21.19      <map>
   21.20        <key>Comment</key>
   21.21 @@ -14903,17 +14914,6 @@
   21.22      <key>Value</key>
   21.23      <integer>0</integer>
   21.24    </map>
   21.25 -  <key>DisablePrecacheDelayAfterTeleporting</key>
   21.26 -  <map>
   21.27 -    <key>Comment</key>
   21.28 -    <string>Disables the artificial delay in the viewer that precaches some incoming assets</string>
   21.29 -    <key>Persist</key>
   21.30 -    <integer>0</integer>
   21.31 -    <key>Type</key>
   21.32 -    <string>Boolean</string>
   21.33 -    <key>Value</key>
   21.34 -    <integer>0</integer>
   21.35 -  </map>
   21.36    <key>FMODExProfilerEnable</key>
   21.37    <map>
   21.38      <key>Comment</key>
    22.1 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl	Thu Jan 30 13:17:17 2014 -0500
    22.2 +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl	Tue Feb 11 13:41:31 2014 -0500
    22.3 @@ -22,30 +22,46 @@
    22.4   * $/LicenseInfo$
    22.5   */
    22.6  
    22.7 -
    22.8 -
    22.9  ATTRIBUTE vec4 weight4;  
   22.10  
   22.11 -uniform mat4 matrixPalette[32];
   22.12 +uniform mat3 matrixPalette[52];
   22.13 +uniform vec3 translationPalette[52];
   22.14  
   22.15  mat4 getObjectSkinnedTransform()
   22.16  {
   22.17 -	int i; 
   22.18 +	int i;
   22.19  	
   22.20  	vec4 w = fract(weight4);
   22.21  	vec4 index = floor(weight4);
   22.22  	
   22.23 -		 index = min(index, vec4(31.0));
   22.24 +		 index = min(index, vec4(51.0));
   22.25  		 index = max(index, vec4( 0.0));
   22.26  
   22.27  	float scale = 1.0/(w.x+w.y+w.z+w.w);
   22.28  	w *= scale;
   22.29  	
   22.30 -	mat4 mat = matrixPalette[int(index.x)]*w.x;
   22.31 -	mat += matrixPalette[int(index.y)]*w.y;
   22.32 -	mat += matrixPalette[int(index.z)]*w.z;
   22.33 -	mat += matrixPalette[int(index.w)]*w.w;
   22.34 +	int i1 = int(index.x);
   22.35 +	int i2 = int(index.y);
   22.36 +	int i3 = int(index.z);
   22.37 +	int i4 = int(index.w);
   22.38  		
   22.39 -	return mat;
   22.40 +	mat3 mat  = matrixPalette[i1]*w.x;
   22.41 +		 mat += matrixPalette[i2]*w.y;
   22.42 +		 mat += matrixPalette[i3]*w.z;
   22.43 +		 mat += matrixPalette[i4]*w.w;
   22.44 +
   22.45 +	vec3 trans = translationPalette[i1]*w.x;
   22.46 +	trans += translationPalette[i2]*w.y;
   22.47 +	trans += translationPalette[i3]*w.z;
   22.48 +	trans += translationPalette[i4]*w.w;
   22.49 +
   22.50 +	mat4 ret;
   22.51 +
   22.52 +	ret[0] = vec4(mat[0], 0);
   22.53 +	ret[1] = vec4(mat[1], 0);
   22.54 +	ret[2] = vec4(mat[2], 0);
   22.55 +	ret[3] = vec4(trans, 1.0);
   22.56 +				
   22.57 +	return ret;
   22.58  }
   22.59  
    23.1 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl	Thu Jan 30 13:17:17 2014 -0500
    23.2 +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl	Tue Feb 11 13:41:31 2014 -0500
    23.3 @@ -534,6 +534,7 @@
    23.4  #ifdef FOR_IMPOSTOR
    23.5  	vec4 color;
    23.6  	color.rgb = diff.rgb;
    23.7 +	color.a = 1.0;
    23.8  
    23.9  #ifdef USE_VERTEX_COLOR
   23.10  	float final_alpha = diff.a * vertex_color.a;
    24.1 --- a/indra/newview/character/avatar_lad.xml	Thu Jan 30 13:17:17 2014 -0500
    24.2 +++ b/indra/newview/character/avatar_lad.xml	Tue Feb 11 13:41:31 2014 -0500
    24.3 @@ -3825,7 +3825,11 @@
    24.4          <volume_morph
    24.5            name="BELLY"
    24.6            scale="0.075 0.04 0.03"
    24.7 -          pos="0.07 0 -0.07"/>
    24.8 +          pos="0.07 0 -0.02"/>
    24.9 +        <volume_morph
   24.10 +          name="PELVIS"
   24.11 +          scale="0.075 0.04 0.03"
   24.12 +          pos="0.07 0 -0.02"/>
   24.13        </param_morph>
   24.14      </param>
   24.15  
   24.16 @@ -3844,7 +3848,16 @@
   24.17       camera_elevation=".1"
   24.18       camera_distance="1"
   24.19       camera_angle="15">
   24.20 -      <param_morph />
   24.21 +      <param_morph>
   24.22 +        <volume_morph
   24.23 +          name="LEFT_PEC"
   24.24 +          scale="0.0273 0.0273 0.0273"
   24.25 +          pos="0.038 0.024 -0.016"/>
   24.26 +        <volume_morph
   24.27 +          name="RIGHT_PEC"
   24.28 +          scale="0.0273 0.0273 0.0273"
   24.29 +          pos="0.038 -0.024 -0.016"/>
   24.30 +	  </param_morph>
   24.31      </param>
   24.32  
   24.33      <param
   24.34 @@ -3861,7 +3874,16 @@
   24.35       value_max="1"
   24.36       camera_elevation="0"
   24.37       camera_distance=".28">
   24.38 -      <param_morph />
   24.39 +      <param_morph>
   24.40 +        <volume_morph
   24.41 +          name="LEFT_PEC"
   24.42 +          scale="-0.05 0.0 0.0"
   24.43 +          pos="-0.01 -0.01 -0.02"/>
   24.44 +        <volume_morph
   24.45 +          name="RIGHT_PEC"
   24.46 +          scale="-0.05 0.0 0.0"
   24.47 +          pos="-0.01 -0.01 -0.02"/>
   24.48 +	  </param_morph>
   24.49      </param>
   24.50  
   24.51      <param
   24.52 @@ -3878,7 +3900,16 @@
   24.53       value_max="1"
   24.54       camera_elevation="0"
   24.55       camera_distance=".28">
   24.56 -      <param_morph />
   24.57 +      <param_morph>
   24.58 +        <volume_morph
   24.59 +          name="LEFT_PEC"
   24.60 +          scale="-0.051 0.0 0.0"
   24.61 +          pos="-0.02 -0.01 -0.03"/>
   24.62 +        <volume_morph
   24.63 +          name="RIGHT_PEC"
   24.64 +          scale="-0.051 0.0 0.0"
   24.65 +          pos="-0.02 -0.01 -0.03"/>
   24.66 +	  </param_morph>
   24.67      </param>
   24.68  
   24.69      <param
   24.70 @@ -3944,6 +3975,10 @@
   24.71            scale="0.0 -0.01 0.0"
   24.72            pos="0.0 0.0 0"/>
   24.73          <volume_morph
   24.74 +          name="UPPER_BACK"
   24.75 +          scale="-0.01 -0.01 0.0"
   24.76 +          pos="0.0 0.0 0"/>
   24.77 +        <volume_morph
   24.78            name="CHEST"
   24.79            scale="-0.01 -0.01 0.0"
   24.80            pos="0.01 0.0 0"/>
   24.81 @@ -3994,6 +4029,10 @@
   24.82            scale="-0.01 -0.01 0.0"
   24.83            pos="0.01 0.0 0"/>
   24.84          <volume_morph
   24.85 +          name="UPPER_BACK"
   24.86 +          scale="-0.01 -0.01 0.0"
   24.87 +          pos="0.0 0.0 0"/>
   24.88 +        <volume_morph
   24.89            name="CHEST"
   24.90            scale="-0.02 -0.02 0.0"
   24.91            pos="0.01 0.0 0"/>
   24.92 @@ -4042,6 +4081,32 @@
   24.93            scale="0.02 0.03 0.03"
   24.94            pos="0 0 -0.03"/>
   24.95          <volume_morph
   24.96 +          name="PELVIS"
   24.97 +          scale="0.02 0.03 0.03"
   24.98 +          pos="0 0 -0.03"/>
   24.99 +        <volume_morph
  24.100 +          name="UPPER_BACK"
  24.101 +          scale="0.01 0.03 0.0"
  24.102 +          pos="-0.03 0 0"/>
  24.103 +        <volume_morph
  24.104 +          name="LOWER_BACK"
  24.105 +          scale="0.04 0.06 0.0"
  24.106 +          pos="-0.06 0 0"/>
  24.107 +        <volume_morph
  24.108 +          name="LEFT_HANDLE"
  24.109 +          pos="0.0 0.08 0.0"/>
  24.110 +        <volume_morph
  24.111 +          name="RIGHT_HANDLE"
  24.112 +          pos="0.0 -0.08 0.0"/>
  24.113 +        <volume_morph
  24.114 +          name="LEFT_PEC"
  24.115 +          scale="0.0367 0.0367 0.016"
  24.116 +          pos="0.00 -0.005 -0.013"/>
  24.117 +        <volume_morph
  24.118 +          name="RIGHT_PEC"
  24.119 +          scale="0.0367 0.0367 0.016"
  24.120 +          pos="0.00 0.005 -0.013"/>
  24.121 +        <volume_morph
  24.122            name="BELLY"
  24.123            scale="0.09 0.08 0.07"
  24.124            pos="0 0 -0.05"/>
  24.125 @@ -4093,7 +4158,16 @@
  24.126       value_max="2"
  24.127       camera_elevation=".3"
  24.128       camera_distance=".8">
  24.129 -      <param_morph />
  24.130 +      <param_morph>
  24.131 +        <volume_morph
  24.132 +          name="LEFT_PEC"
  24.133 +          scale="0.0 0.0 0.0"
  24.134 +          pos="0.004 0.0 -0.01"/>
  24.135 +        <volume_morph
  24.136 +          name="RIGHT_PEC"
  24.137 +          scale="0.0 0.0 0.0"
  24.138 +          pos="0.004 0.0 -0.01"/>
  24.139 +      </param_morph>
  24.140      </param>
  24.141      
  24.142      <param
  24.143 @@ -4143,6 +4217,15 @@
  24.144          <volume_morph
  24.145            name="BELLY"
  24.146            scale="0.0 0.02 0.0"/>
  24.147 +        <volume_morph
  24.148 +          name="LOWER_BACK"
  24.149 +          scale="0.0 0.02 0.0"/>
  24.150 +        <volume_morph
  24.151 +          name="LEFT_HANDLE"
  24.152 +          pos="0.0 0.025 0.0"/>
  24.153 +        <volume_morph
  24.154 +          name="RIGHT_HANDLE"
  24.155 +          pos="0.0 -0.025 0.0"/>
  24.156        </param_morph>
  24.157      </param>
  24.158  
  24.159 @@ -4162,7 +4245,16 @@
  24.160       value_max="1.3"
  24.161       camera_elevation=".3"
  24.162       camera_distance=".8">
  24.163 -      <param_morph />
  24.164 +      <param_morph>
  24.165 +        <volume_morph
  24.166 +          name="LEFT_PEC"
  24.167 +          scale="0.0 0.0 0.0"
  24.168 +          pos="0.0 -0.026 0.0"/>
  24.169 +        <volume_morph
  24.170 +          name="RIGHT_PEC"
  24.171 +          scale="0.0 0.0 0.0"
  24.172 +          pos="0.0 0.026 0.0"/>
  24.173 +      </param_morph>
  24.174      </param>
  24.175      
  24.176      <param
  24.177 @@ -4177,11 +4269,20 @@
  24.178       label_min="Big Pectorals"
  24.179       label_max="Sunken Chest"
  24.180       value_default="0"
  24.181 -     value_min="-.5"
  24.182 +     value_min="-1.0"
  24.183       value_max="1.1"
  24.184       camera_elevation=".3"
  24.185       camera_distance="1.2">
  24.186 -      <param_morph />
  24.187 +      <param_morph>
  24.188 +        <volume_morph
  24.189 +          name="LEFT_PEC"
  24.190 +          scale="0.0 0.0 0.0"
  24.191 +          pos="-0.03 -0.024 -0.01"/>
  24.192 +        <volume_morph
  24.193 +          name="RIGHT_PEC"
  24.194 +          scale="0.0 0.0 0.0"
  24.195 +          pos="-0.03 0.024 -0.01"/>
  24.196 +      </param_morph>
  24.197      </param>
  24.198  
  24.199      <!-- ############# # 
  24.200 @@ -4206,6 +4307,14 @@
  24.201            scale="0.03 0.03 0.0"
  24.202            pos="-0.03 0 0.02"/>
  24.203          <volume_morph
  24.204 +          name="LEFT_PEC"
  24.205 +          scale="0.0 0.0 0.0"
  24.206 +          pos="0.008 -0.03 0.01"/>
  24.207 +        <volume_morph
  24.208 +          name="RIGHT_PEC"
  24.209 +          scale="0.0 0.0 0.0"
  24.210 +          pos="0.008 0.03 0.01"/>
  24.211 +        <volume_morph
  24.212            name="L_CLAVICLE"
  24.213            scale="0.02 0.0 0.01"
  24.214            pos="-0.02 0 0"/>
  24.215 @@ -4376,7 +4485,16 @@
  24.216       value_default="0"
  24.217       value_min="-3"
  24.218       value_max="3">
  24.219 -      <param_morph />
  24.220 +      <param_morph>
  24.221 +        <volume_morph
  24.222 +          name="LEFT_PEC"
  24.223 +          scale="0.0 0.0 0.0"
  24.224 +          pos="0.0 0.0 -0.01"/>
  24.225 +        <volume_morph
  24.226 +          name="RIGHT_PEC"
  24.227 +          scale="0.0 0.0 0.0"
  24.228 +          pos="0.0 0.0 -0.01"/>
  24.229 +	  </param_morph>
  24.230      </param>
  24.231  
  24.232      <param
  24.233 @@ -4389,7 +4507,16 @@
  24.234       value_default="0"
  24.235       value_min="-1.25"
  24.236       value_max="1.25">
  24.237 -      <param_morph />
  24.238 +      <param_morph>
  24.239 +        <volume_morph
  24.240 +          name="LEFT_PEC"
  24.241 +          scale="0.0 0.0 0.0"
  24.242 +          pos="0.0 -0.026 0.0"/>
  24.243 +        <volume_morph
  24.244 +          name="RIGHT_PEC"
  24.245 +          scale="0.0 0.0 0.0"
  24.246 +          pos="0.0 0.026 -0.0"/>
  24.247 +	  </param_morph>
  24.248      </param>
  24.249  
  24.250      <param
  24.251 @@ -4402,7 +4529,12 @@
  24.252       value_default="0"
  24.253       value_min="-1"
  24.254       value_max="1">
  24.255 -      <param_morph />
  24.256 +      <param_morph>
  24.257 +        <volume_morph
  24.258 +          name="BELLY"
  24.259 +          scale="0.0 0.0 0.0"
  24.260 +          pos="0.0 0.0 0.05"/>
  24.261 +	  </param_morph>
  24.262      </param>
  24.263  
  24.264      <param
  24.265 @@ -4415,7 +4547,16 @@
  24.266       value_default="0"
  24.267       value_min="-2"
  24.268       value_max="2">
  24.269 -      <param_morph />
  24.270 +      <param_morph>
  24.271 +        <volume_morph
  24.272 +          name="LEFT_PEC"
  24.273 +          scale="0.0 0.0 0.0"
  24.274 +          pos="0.0 0.03 0.0"/>
  24.275 +        <volume_morph
  24.276 +          name="RIGHT_PEC"
  24.277 +          scale="0.0 0.0 0.0"
  24.278 +          pos="0.0 0.03 0.0"/>
  24.279 +	  </param_morph>
  24.280      </param>
  24.281  
  24.282      <!--
  24.283 @@ -4518,6 +4659,10 @@
  24.284            name="PELVIS"
  24.285            scale="-0.01 0.0 0.0"
  24.286            pos="0.01 0 0.0"/>
  24.287 +        <volume_morph
  24.288 +          name="BUTT"
  24.289 +          scale="0.0 0.0886 0.0"
  24.290 +          pos="0.03 0 0.0"/>
  24.291        </param_morph>
  24.292      </param>
  24.293  
  24.294 @@ -4949,7 +5094,11 @@
  24.295       value_default="0"
  24.296       value_min="-1"
  24.297       value_max="1">
  24.298 -      <param_morph />
  24.299 +      <param_morph>
  24.300 +        <volume_morph
  24.301 +          name="BUTT"
  24.302 +          pos="0.0 0.0 0.05"/>
  24.303 +	  </param_morph>
  24.304      </param>
  24.305  
  24.306      <param
  24.307 @@ -4962,7 +5111,11 @@
  24.308       value_default="0"
  24.309       value_min="-1"
  24.310       value_max="1">
  24.311 -      <param_morph />
  24.312 +      <param_morph>
  24.313 +        <volume_morph
  24.314 +          name="BUTT"
  24.315 +          pos="0.0 0.05 0.0"/>
  24.316 +	  </param_morph>
  24.317      </param>
  24.318  
  24.319      <!--
    25.1 --- a/indra/newview/character/avatar_skeleton.xml	Thu Jan 30 13:17:17 2014 -0500
    25.2 +++ b/indra/newview/character/avatar_skeleton.xml	Tue Feb 11 13:41:31 2014 -0500
    25.3 @@ -1,11 +1,18 @@
    25.4  <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
    25.5 -<linden_skeleton version="1.0" num_bones="46" num_collision_volumes="19">
    25.6 +<linden_skeleton version="1.0" num_bones="53" num_collision_volumes="26">
    25.7  <bone name="mPelvis" pos="0.000 0.000 1.067" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 1.067015">
    25.8  	<collision_volume name="PELVIS" pos = "-0.01 0 -0.02" rot="0.000000 8.00000 0.000000" scale="0.12 0.16 0.17"/>
    25.9 +	<collision_volume name="BUTT" pos = "-0.06 0 -0.1" rot="0.000000 0.00000 0.000000" scale="0.1 0.1 0.1"/>
   25.10  	<bone name="mTorso" pos="0.000 0.000 0.084" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.084073">
   25.11  		<collision_volume name="BELLY" pos = "0.028 0 0.04" rot="0.000000 8.00000 0.000000" scale="0.09 0.13 0.15"/>
   25.12 +		<collision_volume name="LOWER_BACK" pos = "0.0 0.0 0.023" rot="0.000000 0.00000 0.000000" scale="0.09 0.13 0.15"/>
   25.13 +		<collision_volume name="LEFT_HANDLE" pos = "0.0 0.10 0.058" rot="0.000000 0.00000 0.000000" scale="0.05 0.05 0.05"/>
   25.14 +		<collision_volume name="RIGHT_HANDLE" pos = "0.0 -0.10 0.058" rot="0.000000 0.00000 0.000000" scale="0.05 0.05 0.05"/>
   25.15  		<bone name="mChest" pos="-0.015 0.000 0.205" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.015368 0.000000 0.204877">
   25.16  			<collision_volume name="CHEST" pos = "0.028 0 0.07" rot="0.000000 -10.00000 0.000000" scale="0.11 0.15 0.2"/>
   25.17 +			<collision_volume name="UPPER_BACK" pos = "0.0 0.0 0.017" rot="0.000000 0.00000 0.000000" scale="0.09 0.13 0.15"/>
   25.18 +			<collision_volume name="LEFT_PEC" pos = "0.119 0.082 0.042" rot="0.000000 4.29000 0.000000" scale="0.05 0.05 0.05"/>
   25.19 +			<collision_volume name="RIGHT_PEC" pos = "0.119 -0.082 0.042" rot="0.000000 4.29000 0.000000" scale="0.05 0.05 0.05"/>
   25.20  			<bone name="mNeck" pos="-0.010 0.000 0.251" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.009507 0.000000 0.251108">
   25.21  				<collision_volume name="NECK" pos = "0.0 0 0.02" rot="0.000000 0.000000 0.000000" scale="0.05 0.06 0.08"/>
   25.22  				<bone name="mHead" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.000000 0.075630">
    26.1 --- a/indra/newview/llagent.cpp	Thu Jan 30 13:17:17 2014 -0500
    26.2 +++ b/indra/newview/llagent.cpp	Tue Feb 11 13:41:31 2014 -0500
    26.3 @@ -259,11 +259,9 @@
    26.4  	return true;
    26.5  }
    26.6  
    26.7 -// static
    26.8 -void LLAgent::parcelChangedCallback()
    26.9 +void LLAgent::setCanEditParcel() // called via mParcelChangedSignal
   26.10  {
   26.11  	bool can_edit = LLToolMgr::getInstance()->canEdit();
   26.12 -
   26.13  	gAgent.mCanEditParcel = can_edit;
   26.14  }
   26.15  
   26.16 @@ -425,6 +423,8 @@
   26.17  
   26.18  	mListener.reset(new LLAgentListener(*this));
   26.19  
   26.20 +	addParcelChangedCallback(&setCanEditParcel);
   26.21 +
   26.22  	mMoveTimer.stop();
   26.23  }
   26.24  
   26.25 @@ -451,8 +451,6 @@
   26.26  	mLastKnownRequestMaturity = mLastKnownResponseMaturity;
   26.27  	mIsDoSendMaturityPreferenceToServer = true;
   26.28  
   26.29 -	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&LLAgent::parcelChangedCallback));
   26.30 -
   26.31  	if (!mTeleportFinishedSlot.connected())
   26.32  	{
   26.33  		mTeleportFinishedSlot = LLViewerParcelMgr::getInstance()->setTeleportFinishedCallback(boost::bind(&LLAgent::handleTeleportFinished, this));
   26.34 @@ -835,22 +833,33 @@
   26.35  	}
   26.36  }
   26.37  
   26.38 +void LLAgent::changeParcels()
   26.39 +{
   26.40 +	LL_DEBUGS("AgentLocation") << "Calling ParcelChanged callbacks" << LL_ENDL;
   26.41 +	// Notify anything that wants to know about parcel changes
   26.42 +	mParcelChangedSignal();
   26.43 +}
   26.44 +
   26.45 +boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_callback_t cb)
   26.46 +{
   26.47 +	return mParcelChangedSignal.connect(cb);
   26.48 +}
   26.49 +
   26.50  //-----------------------------------------------------------------------------
   26.51  // setRegion()
   26.52  //-----------------------------------------------------------------------------
   26.53  void LLAgent::setRegion(LLViewerRegion *regionp)
   26.54  {
   26.55 -	bool teleport = true;
   26.56 -
   26.57 +	bool notifyRegionChange;
   26.58 +	
   26.59  	llassert(regionp);
   26.60  	if (mRegionp != regionp)
   26.61  	{
   26.62 -		// std::string host_name;
   26.63 -		// host_name = regionp->getHost().getHostName();
   26.64 -
   26.65 +		notifyRegionChange = true;
   26.66 +		
   26.67  		std::string ip = regionp->getHost().getString();
   26.68 -		llinfos << "Moving agent into region: " << regionp->getName()
   26.69 -				<< " located at " << ip << llendl;
   26.70 +		LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName()
   26.71 +				<< " located at " << ip << LL_ENDL;
   26.72  		if (mRegionp)
   26.73  		{
   26.74  			// We've changed regions, we're now going to change our agent coordinate frame.
   26.75 @@ -878,9 +887,6 @@
   26.76  			{
   26.77  				gSky.mVOGroundp->setRegion(regionp);
   26.78  			}
   26.79 -
   26.80 -			// Notify windlight managers
   26.81 -			teleport = (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE);
   26.82  		}
   26.83  		else
   26.84  		{
   26.85 @@ -902,8 +908,14 @@
   26.86  		// Pass new region along to metrics components that care about this level of detail.
   26.87  		LLAppViewer::metricsUpdateRegion(regionp->getHandle());
   26.88  	}
   26.89 +	else
   26.90 +	{
   26.91 +		notifyRegionChange = false;
   26.92 +	}
   26.93  	mRegionp = regionp;
   26.94  
   26.95 +	// TODO - most of what follows probably should be moved into callbacks
   26.96 +
   26.97  	// Pass the region host to LLUrlEntryParcel to resolve parcel name
   26.98  	// with a server request.
   26.99  	LLUrlEntryParcel::setRegionHost(getRegionHost());
  26.100 @@ -922,15 +934,6 @@
  26.101  
  26.102  	LLFloaterMove::sUpdateFlyingStatus();
  26.103  
  26.104 -	if (teleport)
  26.105 -	{
  26.106 -		LLEnvManagerNew::instance().onTeleport();
  26.107 -	}
  26.108 -	else
  26.109 -	{
  26.110 -		LLEnvManagerNew::instance().onRegionCrossing();
  26.111 -	}
  26.112 -
  26.113  	// If the newly entered region is using server bakes, and our
  26.114  	// current appearance is non-baked, request appearance update from
  26.115  	// server.
  26.116 @@ -943,6 +946,12 @@
  26.117  		// Need to handle via callback after caps arrive.
  26.118  		mRegionp->setCapabilitiesReceivedCallback(boost::bind(&LLAgent::handleServerBakeRegionTransition,this,_1));
  26.119  	}
  26.120 +
  26.121 +	if (notifyRegionChange)
  26.122 +	{
  26.123 +		LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL;
  26.124 +		mRegionChangedSignal();
  26.125 +	}
  26.126  }
  26.127  
  26.128  
  26.129 @@ -967,6 +976,16 @@
  26.130  	}
  26.131  }
  26.132  
  26.133 +boost::signals2::connection LLAgent::addRegionChangedCallback(const region_changed_signal_t::slot_type& cb)
  26.134 +{
  26.135 +	return mRegionChangedSignal.connect(cb);
  26.136 +}
  26.137 +
  26.138 +void LLAgent::removeRegionChangedCallback(boost::signals2::connection callback)
  26.139 +{
  26.140 +	mRegionChangedSignal.disconnect(callback);
  26.141 +}
  26.142 +
  26.143  //-----------------------------------------------------------------------------
  26.144  // inPrelude()
  26.145  //-----------------------------------------------------------------------------
    27.1 --- a/indra/newview/llagent.h	Thu Jan 30 13:17:17 2014 -0500
    27.2 +++ b/indra/newview/llagent.h	Tue Feb 11 13:41:31 2014 -0500
    27.3 @@ -231,15 +231,54 @@
    27.4  	LLVector3		mHomePosRegion;
    27.5  
    27.6  	//--------------------------------------------------------------------
    27.7 +	// Parcel
    27.8 +	//--------------------------------------------------------------------
    27.9 +public:
   27.10 +	void changeParcels(); // called by LLViewerParcelMgr when we cross a parcel boundary
   27.11 +	
   27.12 +	// Register a boost callback to be called when the agent changes parcels
   27.13 +	typedef boost::function<void()> parcel_changed_callback_t;
   27.14 +	boost::signals2::connection     addParcelChangedCallback(parcel_changed_callback_t);
   27.15 +
   27.16 +private:
   27.17 +	typedef boost::signals2::signal<void()> parcel_changed_signal_t;
   27.18 +	parcel_changed_signal_t		mParcelChangedSignal;
   27.19 +
   27.20 +	//--------------------------------------------------------------------
   27.21  	// Region
   27.22  	//--------------------------------------------------------------------
   27.23 -public:
   27.24 +  public:
   27.25  	void			setRegion(LLViewerRegion *regionp);
   27.26  	LLViewerRegion	*getRegion() const;
   27.27  	LLHost			getRegionHost() const;
   27.28  	BOOL			inPrelude();
   27.29 -private:
   27.30 +
   27.31 +	/**
   27.32 +	 * Register a boost callback to be called when the agent changes regions
   27.33 +	 * Note that if you need to access a capability for the region, you may need to wait
   27.34 +	 * for the capabilities to be received, since in some cases your region changed
   27.35 +	 * callback will be called before the capabilities have been received.  Your callback
   27.36 +	 * may need to look something like:
   27.37 +	 *
   27.38 +	 * 	 LLViewerRegion* region = gAgent.getRegion();
   27.39 +	 * 	 if (region->capabilitiesReceived())
   27.40 +	 * 	 {
   27.41 +	 *       useCapability(region);
   27.42 +	 * 	 }
   27.43 +	 * 	 else // Need to handle via callback after caps arrive.
   27.44 +	 * 	 {
   27.45 +	 *       region->setCapabilitiesReceivedCallback(boost::bind(&useCapability,region,_1));
   27.46 +	 *       // you may or may not want to remove that callback
   27.47 +	 * 	 }
   27.48 +	 */
   27.49 +	typedef boost::signals2::signal<void()> region_changed_signal_t;
   27.50 +
   27.51 +	boost::signals2::connection     addRegionChangedCallback(const region_changed_signal_t::slot_type& cb);
   27.52 +	void                            removeRegionChangedCallback(boost::signals2::connection callback);
   27.53 +
   27.54 +  private:
   27.55  	LLViewerRegion	*mRegionp;
   27.56 +	region_changed_signal_t		            mRegionChangedSignal;
   27.57  
   27.58  	//--------------------------------------------------------------------
   27.59  	// History
   27.60 @@ -640,9 +679,10 @@
   27.61  public:
   27.62  	bool			canEditParcel() const { return mCanEditParcel; }
   27.63  private:
   27.64 +	static void     setCanEditParcel();
   27.65  	bool			mCanEditParcel;
   27.66  
   27.67 -	static void parcelChangedCallback();
   27.68 +
   27.69  
   27.70  /********************************************************************************
   27.71   **                                                                            **
    28.1 --- a/indra/newview/lldrawpoolavatar.cpp	Thu Jan 30 13:17:17 2014 -0500
    28.2 +++ b/indra/newview/lldrawpoolavatar.cpp	Tue Feb 11 13:41:31 2014 -0500
    28.3 @@ -55,6 +55,7 @@
    28.4  static U32 sBufferUsage = GL_STREAM_DRAW_ARB;
    28.5  static U32 sShaderLevel = 0;
    28.6  
    28.7 +#define JOINT_COUNT 52
    28.8  
    28.9  LLGLSLShader* LLDrawPoolAvatar::sVertexProgram = NULL;
   28.10  BOOL	LLDrawPoolAvatar::sSkipOpaque = FALSE;
   28.11 @@ -1582,10 +1583,11 @@
   28.12  		LLVector4a* norm = has_normal ? (LLVector4a*) normal.get() : NULL;
   28.13  		
   28.14  		//build matrix palette
   28.15 -		LLMatrix4a mp[64];
   28.16 +		LLMatrix4a mp[JOINT_COUNT];
   28.17  		LLMatrix4* mat = (LLMatrix4*) mp;
   28.18  
   28.19 -		for (U32 j = 0; j < skin->mJointNames.size(); ++j)
   28.20 +		U32 count = llmin((U32) skin->mJointNames.size(), (U32) JOINT_COUNT);
   28.21 +		for (U32 j = 0; j < count; ++j)
   28.22  		{
   28.23  			LLJoint* joint = avatar->getJoint(skin->mJointNames[j]);
   28.24  			if (joint)
   28.25 @@ -1642,6 +1644,7 @@
   28.26  				LLVector4a& n = vol_face.mNormals[j];
   28.27  				bind_shape_matrix.rotate(n, t);
   28.28  				final_mat.rotate(t, dst);
   28.29 +				dst.normalize3fast();
   28.30  				norm[j] = dst;
   28.31  			}
   28.32  		}
   28.33 @@ -1708,9 +1711,9 @@
   28.34  		{
   28.35  			if (sShaderLevel > 0)
   28.36  			{ //upload matrix palette to shader
   28.37 -				LLMatrix4 mat[32];
   28.38 +				LLMatrix4 mat[JOINT_COUNT];
   28.39  
   28.40 -				U32 count = llmin((U32) skin->mJointNames.size(), (U32) 32);
   28.41 +				U32 count = llmin((U32) skin->mJointNames.size(), (U32) JOINT_COUNT);
   28.42  
   28.43  				for (U32 i = 0; i < count; ++i)
   28.44  				{
   28.45 @@ -1724,10 +1727,42 @@
   28.46  				
   28.47  				stop_glerror();
   28.48  
   28.49 -				LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv(LLViewerShaderMgr::AVATAR_MATRIX, 
   28.50 +				F32 mp[JOINT_COUNT*9];
   28.51 +
   28.52 +				F32 transp[JOINT_COUNT*3];
   28.53 +
   28.54 +				for (U32 i = 0; i < count; ++i)
   28.55 +				{
   28.56 +					F32* m = (F32*) mat[i].mMatrix;
   28.57 +
   28.58 +					U32 idx = i*9;
   28.59 +
   28.60 +					mp[idx+0] = m[0];
   28.61 +					mp[idx+1] = m[1];
   28.62 +					mp[idx+2] = m[2];
   28.63 +
   28.64 +					mp[idx+3] = m[4];
   28.65 +					mp[idx+4] = m[5];
   28.66 +					mp[idx+5] = m[6];
   28.67 +
   28.68 +					mp[idx+6] = m[8];
   28.69 +					mp[idx+7] = m[9];
   28.70 +					mp[idx+8] = m[10];
   28.71 +
   28.72 +					idx = i*3;
   28.73 +
   28.74 +					transp[idx+0] = m[12];
   28.75 +					transp[idx+1] = m[13];
   28.76 +					transp[idx+2] = m[14];
   28.77 +				}
   28.78 +
   28.79 +				LLDrawPoolAvatar::sVertexProgram->uniformMatrix3fv(LLViewerShaderMgr::AVATAR_MATRIX, 
   28.80  					count,
   28.81  					FALSE,
   28.82 -					(GLfloat*) mat[0].mMatrix);
   28.83 +					(GLfloat*) mp);
   28.84 +
   28.85 +				LLDrawPoolAvatar::sVertexProgram->uniform3fv(LLShaderMgr::AVATAR_TRANSLATION, count, transp);
   28.86 +
   28.87  				
   28.88  				stop_glerror();
   28.89  			}
    29.1 --- a/indra/newview/llenvmanager.cpp	Thu Jan 30 13:17:17 2014 -0500
    29.2 +++ b/indra/newview/llenvmanager.cpp	Tue Feb 11 13:41:31 2014 -0500
    29.3 @@ -92,9 +92,11 @@
    29.4  }
    29.5  
    29.6  //=============================================================================
    29.7 -LLEnvManagerNew::LLEnvManagerNew()
    29.8 +LLEnvManagerNew::LLEnvManagerNew():
    29.9 +	mInterpNextChangeMessage(true),
   29.10 +	mCurRegionUUID(LLUUID::null),
   29.11 +	mLastReceivedID(LLUUID::null)
   29.12  {
   29.13 -	mInterpNextChangeMessage = true;
   29.14  
   29.15  	// Set default environment settings.
   29.16  	mUserPrefs.mUseRegionSettings = true;
   29.17 @@ -102,6 +104,9 @@
   29.18  	mUserPrefs.mWaterPresetName = "Default";
   29.19  	mUserPrefs.mSkyPresetName = "Default";
   29.20  	mUserPrefs.mDayCycleName = "Default";
   29.21 +
   29.22 +	LL_DEBUGS("Windlight")<<LL_ENDL;
   29.23 +	gAgent.addRegionChangedCallback(boost::bind(&LLEnvManagerNew::onRegionChange, this));
   29.24  }
   29.25  
   29.26  bool LLEnvManagerNew::getUseRegionSettings() const
   29.27 @@ -300,6 +305,11 @@
   29.28  
   29.29  	mUserPrefs.mUseRegionSettings	= gSavedSettings.getBOOL("UseEnvironmentFromRegion");
   29.30  	mUserPrefs.mUseDayCycle			= gSavedSettings.getBOOL("UseDayCycle");
   29.31 +
   29.32 +	if (mUserPrefs.mUseRegionSettings)
   29.33 +	{
   29.34 +		requestRegionSettings();
   29.35 +	}
   29.36  }
   29.37  
   29.38  void LLEnvManagerNew::saveUserPrefs()
   29.39 @@ -398,6 +408,7 @@
   29.40  
   29.41  void LLEnvManagerNew::requestRegionSettings()
   29.42  {
   29.43 +	LL_DEBUGS("Windlight") << LL_ENDL;
   29.44  	LLEnvironmentRequest::initiate();
   29.45  }
   29.46  
   29.47 @@ -422,11 +433,6 @@
   29.48  	return mRegionSettingsChangeSignal.connect(cb);
   29.49  }
   29.50  
   29.51 -boost::signals2::connection LLEnvManagerNew::setRegionChangeCallback(const region_change_signal_t::slot_type& cb)
   29.52 -{
   29.53 -	return mRegionChangeSignal.connect(cb);
   29.54 -}
   29.55 -
   29.56  boost::signals2::connection LLEnvManagerNew::setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb)
   29.57  {
   29.58  	return mRegionSettingsAppliedSignal.connect(cb);
   29.59 @@ -457,25 +463,13 @@
   29.60  	}
   29.61  }
   29.62  
   29.63 -void LLEnvManagerNew::onRegionCrossing()
   29.64 -{
   29.65 -	LL_DEBUGS("Windlight") << "Crossed region" << LL_ENDL;
   29.66 -	onRegionChange(true);
   29.67 -}
   29.68 -
   29.69 -void LLEnvManagerNew::onTeleport()
   29.70 -{
   29.71 -	LL_DEBUGS("Windlight") << "Teleported" << LL_ENDL;
   29.72 -	onRegionChange(false);
   29.73 -}
   29.74 -
   29.75  void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
   29.76  {
   29.77  	// If the message was valid, grab the UUID from it and save it for next outbound update message.
   29.78  	mLastReceivedID = content[0]["messageID"].asUUID();
   29.79  
   29.80  	// Refresh cached region settings.
   29.81 -	LL_DEBUGS("Windlight") << "Caching region environment settings: " << content << LL_ENDL;
   29.82 +	LL_DEBUGS("Windlight") << "Received region environment settings: " << content << LL_ENDL;
   29.83  	F32 sun_hour = 0; // *TODO
   29.84  	LLEnvironmentSettings new_settings(content[1], content[2], content[3], sun_hour);
   29.85  	mCachedRegionPrefs = new_settings;
   29.86 @@ -594,6 +588,7 @@
   29.87  
   29.88  void LLEnvManagerNew::updateManagersFromPrefs(bool interpolate)
   29.89  {
   29.90 +	LL_DEBUGS("Windlight")<<LL_ENDL;
   29.91  	// Apply water settings.
   29.92  	updateWaterFromPrefs(interpolate);
   29.93  
   29.94 @@ -651,28 +646,35 @@
   29.95  }
   29.96  
   29.97  
   29.98 -void LLEnvManagerNew::onRegionChange(bool interpolate)
   29.99 +void LLEnvManagerNew::onRegionChange()
  29.100  {
  29.101  	// Avoid duplicating region setting requests
  29.102  	// by checking whether the region is actually changing.
  29.103  	LLViewerRegion* regionp = gAgent.getRegion();
  29.104  	LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null;
  29.105 -	if (region_uuid == mCurRegionUUID)
  29.106 +	if (region_uuid != mCurRegionUUID)
  29.107  	{
  29.108 -		return;
  29.109 +		// Clear locally modified region settings.
  29.110 +		mNewRegionPrefs.clear();
  29.111 +
  29.112 +		// *TODO: clear environment settings of the previous region?
  29.113 +
  29.114 +		// Request environment settings of the new region.
  29.115 +		mCurRegionUUID = region_uuid;
  29.116 +		// for region crossings, interpolate the change; for teleports, don't
  29.117 +		mInterpNextChangeMessage = (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE);
  29.118 +		LL_DEBUGS("Windlight") << (mInterpNextChangeMessage ? "Crossed" : "Teleported")
  29.119 +							   << " to new region: " << region_uuid
  29.120 +							   << LL_ENDL;
  29.121 +		requestRegionSettings();
  29.122  	}
  29.123 -
  29.124 -	// Clear locally modified region settings.
  29.125 -	mNewRegionPrefs.clear();
  29.126 -
  29.127 -	// *TODO: clear environment settings of the previous region?
  29.128 -
  29.129 -	// Request environment settings of the new region.
  29.130 -	LL_DEBUGS("Windlight") << "New viewer region: " << region_uuid << LL_ENDL;
  29.131 -	mCurRegionUUID = region_uuid;
  29.132 -	mInterpNextChangeMessage = interpolate;
  29.133 -	requestRegionSettings();
  29.134 -
  29.135 -	// Let interested parties know agent region has been changed.
  29.136 -	mRegionChangeSignal();
  29.137 +	else
  29.138 +	{
  29.139 +		LL_DEBUGS("Windlight") << "disregarding region change; interp: "
  29.140 +							   << (mInterpNextChangeMessage ? "true" : "false")
  29.141 +							   << " regionp: " << regionp
  29.142 +							   << " old: " << mCurRegionUUID
  29.143 +							   << " new: " << region_uuid
  29.144 +							   << LL_ENDL;
  29.145 +	}
  29.146  }
    30.1 --- a/indra/newview/llenvmanager.h	Thu Jan 30 13:17:17 2014 -0500
    30.2 +++ b/indra/newview/llenvmanager.h	Tue Feb 11 13:41:31 2014 -0500
    30.3 @@ -166,7 +166,6 @@
    30.4  public:
    30.5  	typedef boost::signals2::signal<void()> prefs_change_signal_t;
    30.6  	typedef boost::signals2::signal<void()> region_settings_change_signal_t;
    30.7 -	typedef boost::signals2::signal<void()> region_change_signal_t;
    30.8  	typedef boost::signals2::signal<void(bool)> region_settings_applied_signal_t;
    30.9  
   30.10  	LLEnvManagerNew();
   30.11 @@ -222,15 +221,12 @@
   30.12  	bool sendRegionSettings(const LLEnvironmentSettings& new_settings);
   30.13  	boost::signals2::connection setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb);
   30.14  	boost::signals2::connection setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb);
   30.15 -	boost::signals2::connection setRegionChangeCallback(const region_change_signal_t::slot_type& cb);
   30.16  	boost::signals2::connection setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb);
   30.17  
   30.18  	static bool canEditRegionSettings(); /// @return true if we have access to editing region environment
   30.19  	static const std::string getScopeString(LLEnvKey::EScope scope);
   30.20  
   30.21  	// Public callbacks.
   30.22 -	void onRegionCrossing();
   30.23 -	void onTeleport();
   30.24  	void onRegionSettingsResponse(const LLSD& content);
   30.25  	void onRegionSettingsApplyResponse(bool ok);
   30.26  
   30.27 @@ -251,7 +247,7 @@
   30.28  	bool useDefaultSky();
   30.29  	bool useDefaultWater();
   30.30  
   30.31 -	void onRegionChange(bool interpolate);
   30.32 +	void onRegionChange();
   30.33  
   30.34  	/// Emitted when user environment preferences change.
   30.35  	prefs_change_signal_t mUsePrefsChangeSignal;
   30.36 @@ -260,9 +256,6 @@
   30.37  	region_settings_change_signal_t	mRegionSettingsChangeSignal;
   30.38  
   30.39  	/// Emitted when agent region changes. Move to LLAgent?
   30.40 -	region_change_signal_t	mRegionChangeSignal;
   30.41 -
   30.42 -	/// Emitted when agent region changes. Move to LLAgent?
   30.43  	region_settings_applied_signal_t mRegionSettingsAppliedSignal;
   30.44  
   30.45  	LLEnvPrefs				mUserPrefs;					/// User environment preferences.
    31.1 --- a/indra/newview/llfloatereditdaycycle.cpp	Thu Jan 30 13:17:17 2014 -0500
    31.2 +++ b/indra/newview/llfloatereditdaycycle.cpp	Tue Feb 11 13:41:31 2014 -0500
    31.3 @@ -145,7 +145,7 @@
    31.4  	// Connect to env manager events.
    31.5  	LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
    31.6  	env_mgr.setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsChange, this));
    31.7 -	env_mgr.setRegionChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionChange, this));
    31.8 +	gAgent.addRegionChangedCallback(boost::bind(&LLFloaterEditDayCycle::onRegionChange, this));
    31.9  	env_mgr.setRegionSettingsAppliedCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsApplied, this, _1));
   31.10  
   31.11  	// Connect to day cycle manager events.
    32.1 --- a/indra/newview/llfloaterimsession.cpp	Thu Jan 30 13:17:17 2014 -0500
    32.2 +++ b/indra/newview/llfloaterimsession.cpp	Tue Feb 11 13:41:31 2014 -0500
    32.3 @@ -61,6 +61,9 @@
    32.4  #include "llnotificationmanager.h"
    32.5  #include "llautoreplace.h"
    32.6  
    32.7 +const F32 ME_TYPING_TIMEOUT = 4.0f;
    32.8 +const F32 OTHER_TYPING_TIMEOUT = 9.0f;
    32.9 +
   32.10  floater_showed_signal_t LLFloaterIMSession::sIMFloaterShowedSignal;
   32.11  
   32.12  LLFloaterIMSession::LLFloaterIMSession(const LLUUID& session_id)
   32.13 @@ -75,7 +78,10 @@
   32.14  	mTypingTimer(),
   32.15  	mTypingTimeoutTimer(),
   32.16  	mPositioned(false),
   32.17 -	mSessionInitialized(false)
   32.18 +	mSessionInitialized(false),
   32.19 +	mMeTypingTimer(),
   32.20 +	mOtherTypingTimer(),
   32.21 +	mImInfo()
   32.22  {
   32.23  	mIsNearbyChat = false;
   32.24  
   32.25 @@ -96,13 +102,31 @@
   32.26  void LLFloaterIMSession::refresh()
   32.27  {
   32.28  	if (mMeTyping)
   32.29 -{
   32.30 +	{
   32.31 +		// Send an additional Start Typing packet every ME_TYPING_TIMEOUT seconds
   32.32 +		if (mMeTypingTimer.getElapsedTimeF32() > ME_TYPING_TIMEOUT && false == mShouldSendTypingState)
   32.33 +		{
   32.34 +			LL_DEBUGS("TypingMsgs") << "Send additional Start Typing packet" << LL_ENDL;
   32.35 +			LLIMModel::instance().sendTypingState(mSessionID, mOtherParticipantUUID, TRUE);
   32.36 +			mMeTypingTimer.reset();
   32.37 +		}
   32.38 +
   32.39  		// Time out if user hasn't typed for a while.
   32.40  		if (mTypingTimeoutTimer.getElapsedTimeF32() > LLAgent::TYPING_TIMEOUT_SECS)
   32.41  		{
   32.42 -	setTyping(false);
   32.43 +			setTyping(false);
   32.44 +			LL_DEBUGS("TypingMsgs") << "Send stop typing due to timeout" << LL_ENDL;
   32.45  		}
   32.46  	}
   32.47 +
   32.48 +	// Clear <name is typing> message if no data received for OTHER_TYPING_TIMEOUT seconds
   32.49 +	if (mOtherTyping && mOtherTypingTimer.getElapsedTimeF32() > OTHER_TYPING_TIMEOUT)
   32.50 +	{
   32.51 +		LL_DEBUGS("TypingMsgs") << "Received: is typing cleared due to timeout" << LL_ENDL;
   32.52 +		removeTypingIndicator(mImInfo);
   32.53 +		mOtherTyping = false;
   32.54 +	}
   32.55 +
   32.56  }
   32.57  
   32.58  // virtual
   32.59 @@ -953,13 +977,21 @@
   32.60  	// much network traffic. Only send in person-to-person IMs.
   32.61  	if ( mShouldSendTypingState && mDialog == IM_NOTHING_SPECIAL )
   32.62  	{
   32.63 -		// Still typing, send 'start typing' notification or
   32.64 -		// send 'stop typing' notification immediately
   32.65 -		if (!mMeTyping || mTypingTimer.getElapsedTimeF32() > 1.f)
   32.66 +		if ( mMeTyping )
   32.67  		{
   32.68 -			LLIMModel::instance().sendTypingState(mSessionID,
   32.69 -					mOtherParticipantUUID, mMeTyping);
   32.70 -					mShouldSendTypingState = false;
   32.71 +			if ( mTypingTimer.getElapsedTimeF32() > 1.f )
   32.72 +			{
   32.73 +				// Still typing, send 'start typing' notification
   32.74 +				LLIMModel::instance().sendTypingState(mSessionID, mOtherParticipantUUID, TRUE);
   32.75 +				mShouldSendTypingState = false;
   32.76 +				mMeTypingTimer.reset();
   32.77 +			}
   32.78 +		}
   32.79 +		else
   32.80 +		{
   32.81 +			// Send 'stop typing' notification immediately
   32.82 +			LLIMModel::instance().sendTypingState(mSessionID, mOtherParticipantUUID, FALSE);
   32.83 +			mShouldSendTypingState = false;
   32.84  		}
   32.85  	}
   32.86  
   32.87 @@ -975,10 +1007,12 @@
   32.88  
   32.89  void LLFloaterIMSession::processIMTyping(const LLIMInfo* im_info, BOOL typing)
   32.90  {
   32.91 +	LL_DEBUGS("TypingMsgs") << "typing=" << typing << LL_ENDL;
   32.92  	if ( typing )
   32.93  	{
   32.94  		// other user started typing
   32.95  		addTypingIndicator(im_info);
   32.96 +		mOtherTypingTimer.reset();
   32.97  	}
   32.98  	else
   32.99  	{
  32.100 @@ -1202,10 +1236,40 @@
  32.101  
  32.102  void LLFloaterIMSession::addTypingIndicator(const LLIMInfo* im_info)
  32.103  {
  32.104 +/* Operation of "<name> is typing" state machine:
  32.105 +Not Typing state:
  32.106 +
  32.107 +    User types in P2P IM chat ... Send Start Typing, save Started time,
  32.108 +    start Idle Timer (N seconds) go to Typing state
  32.109 +
  32.110 +Typing State:
  32.111 +
  32.112 +    User enters a non-return character: if Now - Started > ME_TYPING_TIMEOUT, send
  32.113 +    Start Typing, restart Idle Timer
  32.114 +    User enters a return character: stop Idle Timer, send IM and Stop
  32.115 +    Typing, go to Not Typing state
  32.116 +    Idle Timer expires: send Stop Typing, go to Not Typing state
  32.117 +
  32.118 +The recipient has a complementary state machine in which a Start Typing
  32.119 +that is not followed by either an IM or another Start Typing within OTHER_TYPING_TIMEOUT
  32.120 +seconds switches the sender out of typing state.
  32.121 +
  32.122 +This has the nice quality of being self-healing for lost start/stop
  32.123 +messages while adding messages only for the (relatively rare) case of a
  32.124 +user who types a very long message (one that takes more than ME_TYPING_TIMEOUT seconds
  32.125 +to type).
  32.126 +
  32.127 +Note: OTHER_TYPING_TIMEOUT must be > ME_TYPING_TIMEOUT for proper operation of the state machine
  32.128 +
  32.129 +*/
  32.130 +
  32.131  	// We may have lost a "stop-typing" packet, don't add it twice
  32.132  	if (im_info && !mOtherTyping)
  32.133  	{
  32.134  		mOtherTyping = true;
  32.135 +		mOtherTypingTimer.reset();
  32.136 +		// Save im_info so that removeTypingIndicator can be properly called because a timeout has occurred
  32.137 +		mImInfo = im_info;
  32.138  
  32.139  		// Update speaker
  32.140  		LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID);
    33.1 --- a/indra/newview/llfloaterimsession.h	Thu Jan 30 13:17:17 2014 -0500
    33.2 +++ b/indra/newview/llfloaterimsession.h	Tue Feb 11 13:41:31 2014 -0500
    33.3 @@ -187,6 +187,8 @@
    33.4  	LLFrameTimer mTypingTimer;
    33.5  	LLFrameTimer mTypingTimeoutTimer;
    33.6  	bool mSessionNameUpdatedForTyping;
    33.7 +	LLFrameTimer mMeTypingTimer;
    33.8 +	LLFrameTimer mOtherTypingTimer;
    33.9  
   33.10  	bool mSessionInitialized;
   33.11  	LLSD mQueuedMsgsForInit;
   33.12 @@ -196,6 +198,8 @@
   33.13  
   33.14  	// connection to voice channel state change signal
   33.15  	boost::signals2::connection mVoiceChannelStateChangeConnection;
   33.16 +
   33.17 +	const LLIMInfo* mImInfo;
   33.18  };
   33.19  
   33.20  #endif  // LL_FLOATERIMSESSION_H
    34.1 --- a/indra/newview/llfloaterland.cpp	Thu Jan 30 13:17:17 2014 -0500
    34.2 +++ b/indra/newview/llfloaterland.cpp	Tue Feb 11 13:41:31 2014 -0500
    34.3 @@ -1791,10 +1791,15 @@
    34.4  	LLParcel* parcel = lop->mParcel->getParcel();
    34.5  	if (parcel)
    34.6  	{
    34.7 -		lop->mOtherTime = atoi(lop->mCleanOtherObjectsTime->getText().c_str());
    34.8 -
    34.9 -		parcel->setCleanOtherTime(lop->mOtherTime);
   34.10 -		send_other_clean_time_message(parcel->getLocalID(), lop->mOtherTime);
   34.11 +		S32 return_time = atoi(lop->mCleanOtherObjectsTime->getText().c_str());
   34.12 +		// Only send return time if it has changed
   34.13 +		if (return_time != lop->mOtherTime)
   34.14 +		{
   34.15 +			lop->mOtherTime = return_time;
   34.16 +
   34.17 +			parcel->setCleanOtherTime(lop->mOtherTime);
   34.18 +			send_other_clean_time_message(parcel->getLocalID(), lop->mOtherTime);
   34.19 +		}
   34.20  	}
   34.21  }
   34.22  
    35.1 --- a/indra/newview/llfloatermodelpreview.cpp	Thu Jan 30 13:17:17 2014 -0500
    35.2 +++ b/indra/newview/llfloatermodelpreview.cpp	Tue Feb 11 13:41:31 2014 -0500
    35.3 @@ -535,9 +535,16 @@
    35.4  	mUploadBtn = getChild<LLButton>("ok_btn");
    35.5  	mCalculateBtn = getChild<LLButton>("calculate_btn");
    35.6  
    35.7 -	mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this));
    35.8 -
    35.9 -	toggleCalculateButton(true);
   35.10 +	if (LLConvexDecomposition::getInstance() != NULL)
   35.11 +	{
   35.12 +		mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this));
   35.13 +
   35.14 +		toggleCalculateButton(true);
   35.15 +	}
   35.16 +	else
   35.17 +	{
   35.18 +		mCalculateBtn->setEnabled(false);
   35.19 +	}
   35.20  
   35.21  	return TRUE;
   35.22  }
    36.1 --- a/indra/newview/llfloaterpathfindingconsole.cpp	Thu Jan 30 13:17:17 2014 -0500
    36.2 +++ b/indra/newview/llfloaterpathfindingconsole.cpp	Tue Feb 11 13:41:31 2014 -0500
    36.3 @@ -34,11 +34,11 @@
    36.4  
    36.5  #include <boost/signals2.hpp>
    36.6  
    36.7 +#include "llagent.h"
    36.8  #include "llbutton.h"
    36.9  #include "llcheckboxctrl.h"
   36.10  #include "llcombobox.h"
   36.11  #include "llcontrol.h"
   36.12 -#include "llenvmanager.h"
   36.13  #include "llfloaterpathfindingcharacters.h"
   36.14  #include "llfloaterpathfindinglinksets.h"
   36.15  #include "llfloaterreg.h"
   36.16 @@ -224,7 +224,7 @@
   36.17  
   36.18  	if (!mRegionBoundarySlot.connected())
   36.19  	{
   36.20 -		mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingConsole::onRegionBoundaryCross, this));
   36.21 +		mRegionBoundarySlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterPathfindingConsole::onRegionBoundaryCross, this));
   36.22  	}
   36.23  
   36.24  	if (!mTeleportFailedSlot.connected())
    37.1 --- a/indra/newview/llfloaterpathfindingobjects.cpp	Thu Jan 30 13:17:17 2014 -0500
    37.2 +++ b/indra/newview/llfloaterpathfindingobjects.cpp	Tue Feb 11 13:41:31 2014 -0500
    37.3 @@ -41,7 +41,6 @@
    37.4  #include "llavatarnamecache.h"
    37.5  #include "llbutton.h"
    37.6  #include "llcheckboxctrl.h"
    37.7 -#include "llenvmanager.h"
    37.8  #include "llfloater.h"
    37.9  #include "llfontgl.h"
   37.10  #include "llnotifications.h"
   37.11 @@ -85,7 +84,7 @@
   37.12  
   37.13  	if (!mRegionBoundaryCrossingSlot.connected())
   37.14  	{
   37.15 -		mRegionBoundaryCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLFloaterPathfindingObjects::onRegionBoundaryCrossed, this));
   37.16 +		mRegionBoundaryCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterPathfindingObjects::onRegionBoundaryCrossed, this));
   37.17  	}
   37.18  
   37.19  	if (!mGodLevelChangeSlot.connected())
    38.1 --- a/indra/newview/llfloaterregioninfo.cpp	Thu Jan 30 13:17:17 2014 -0500
    38.2 +++ b/indra/newview/llfloaterregioninfo.cpp	Tue Feb 11 13:41:31 2014 -0500
    38.3 @@ -91,6 +91,7 @@
    38.4  #include "lltrans.h"
    38.5  #include "llagentui.h"
    38.6  #include "llmeshrepository.h"
    38.7 +#include "llfloaterregionrestarting.h"
    38.8  
    38.9  const S32 TERRAIN_TEXTURE_COUNT = 4;
   38.10  const S32 CORNER_COUNT = 4;
   38.11 @@ -219,7 +220,7 @@
   38.12  		&processEstateOwnerRequest);
   38.13  
   38.14  	// Request region info when agent region changes.
   38.15 -	LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this));
   38.16 +	gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this));
   38.17  
   38.18  	return TRUE;
   38.19  }
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/indra/newview/llfloaterregionrestarting.cpp	Tue Feb 11 13:41:31 2014 -0500
    39.3 @@ -0,0 +1,176 @@
    39.4 +/** 
    39.5 + * @file llfloaterregionrestarting.cpp
    39.6 + * @brief Shows countdown timer during region restart
    39.7 + *
    39.8 + * $LicenseInfo:firstyear=2006&license=viewerlgpl$
    39.9 + * Second Life Viewer Source Code
   39.10 + * Copyright (C) 2010, Linden Research, Inc.
   39.11 + * 
   39.12 + * This library is free software; you can redistribute it and/or
   39.13 + * modify it under the terms of the GNU Lesser General Public
   39.14 + * License as published by the Free Software Foundation;
   39.15 + * version 2.1 of the License only.
   39.16 + * 
   39.17 + * This library is distributed in the hope that it will be useful,
   39.18 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   39.19 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   39.20 + * Lesser General Public License for more details.
   39.21 + * 
   39.22 + * You should have received a copy of the GNU Lesser General Public
   39.23 + * License along with this library; if not, write to the Free Software
   39.24 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
   39.25 + * 
   39.26 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
   39.27 + * $/LicenseInfo$
   39.28 + */
   39.29 +
   39.30 +#include "llviewerprecompiledheaders.h"
   39.31 +
   39.32 +#include "llfloaterregionrestarting.h"
   39.33 +
   39.34 +#include "llfloaterreg.h"
   39.35 +#include "lluictrl.h"
   39.36 +#include "llagent.h"
   39.37 +#include "llagentcamera.h"
   39.38 +#include "llviewerwindow.h"
   39.39 +
   39.40 +static S32 sSeconds;
   39.41 +static U32 sShakeState;
   39.42 +
   39.43 +LLFloaterRegionRestarting::LLFloaterRegionRestarting(const LLSD& key) :
   39.44 +	LLFloater(key),
   39.45 +	LLEventTimer(1)
   39.46 +{
   39.47 +	mName = (std::string)key["NAME"];
   39.48 +	sSeconds = (LLSD::Integer)key["SECONDS"];
   39.49 +}
   39.50 +
   39.51 +LLFloaterRegionRestarting::~LLFloaterRegionRestarting()
   39.52 +{
   39.53 +	mRegionChangedConnection.disconnect();
   39.54 +}
   39.55 +
   39.56 +BOOL LLFloaterRegionRestarting::postBuild()
   39.57 +{
   39.58 +	mRegionChangedConnection = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this));
   39.59 +
   39.60 +	LLStringUtil::format_map_t args;
   39.61 +	std::string text;
   39.62 +
   39.63 +	args["[NAME]"] = mName;
   39.64 +	text = getString("RegionName", args);
   39.65 +	LLTextBox* textbox = getChild<LLTextBox>("region_name");
   39.66 +	textbox->setValue(text);
   39.67 +
   39.68 +	sShakeState = SHAKE_START;
   39.69 +
   39.70 +	refresh();
   39.71 +
   39.72 +	return TRUE;
   39.73 +}
   39.74 +
   39.75 +void LLFloaterRegionRestarting::regionChange()
   39.76 +{
   39.77 +	close();
   39.78 +}
   39.79 +
   39.80 +BOOL LLFloaterRegionRestarting::tick()
   39.81 +{
   39.82 +	refresh();
   39.83 +
   39.84 +	return FALSE;
   39.85 +}
   39.86 +
   39.87 +void LLFloaterRegionRestarting::refresh()
   39.88 +{
   39.89 +	LLStringUtil::format_map_t args;
   39.90 +	std::string text;
   39.91 +
   39.92 +	args["[SECONDS]"] = llformat("%d", sSeconds);
   39.93 +	getChild<LLTextBox>("restart_seconds")->setValue(getString("RestartSeconds", args));
   39.94 +
   39.95 +	sSeconds = sSeconds - 1;
   39.96 +	if(sSeconds < 0.0)
   39.97 +	{
   39.98 +		sSeconds = 0;
   39.99 +	}
  39.100 +}
  39.101 +
  39.102 +void LLFloaterRegionRestarting::draw()
  39.103 +{
  39.104 +	LLFloater::draw();
  39.105 +
  39.106 +	const F32 SHAKE_INTERVAL = 0.025;
  39.107 +	const F32 SHAKE_TOTAL_DURATION = 1.8; // the length of the default alert tone for this
  39.108 +	const F32 SHAKE_INITIAL_MAGNITUDE = 1.5;
  39.109 +	const F32 SHAKE_HORIZONTAL_BIAS = 0.25;
  39.110 +	F32 time_shaking;
  39.111 +	
  39.112 +	if(SHAKE_START == sShakeState)
  39.113 +	{
  39.114 +			mShakeTimer.setTimerExpirySec(SHAKE_INTERVAL);
  39.115 +			sShakeState = SHAKE_LEFT;
  39.116 +			mShakeIterations = 0;
  39.117 +			mShakeMagnitude = SHAKE_INITIAL_MAGNITUDE;
  39.118 +	}
  39.119 +
  39.120 +	if(SHAKE_DONE != sShakeState && mShakeTimer.hasExpired())
  39.121 +	{
  39.122 +		gAgentCamera.unlockView();
  39.123 +
  39.124 +		switch(sShakeState)
  39.125 +		{
  39.126 +			case SHAKE_LEFT:
  39.127 +				gAgentCamera.setPanLeftKey(mShakeMagnitude * SHAKE_HORIZONTAL_BIAS);
  39.128 +				sShakeState = SHAKE_UP;
  39.129 +				break;
  39.130 +
  39.131 +			case SHAKE_UP:
  39.132 +				gAgentCamera.setPanUpKey(mShakeMagnitude);
  39.133 +				sShakeState = SHAKE_RIGHT;
  39.134 +				break;
  39.135 +
  39.136 +			case SHAKE_RIGHT:
  39.137 +				gAgentCamera.setPanRightKey(mShakeMagnitude * SHAKE_HORIZONTAL_BIAS);
  39.138 +				sShakeState = SHAKE_DOWN;
  39.139 +				break;
  39.140 +
  39.141 +			case SHAKE_DOWN:
  39.142 +				gAgentCamera.setPanDownKey(mShakeMagnitude);
  39.143 +				mShakeIterations++;
  39.144 +				time_shaking = SHAKE_INTERVAL * (mShakeIterations * 4 /* left, up, right, down */);
  39.145 +				if(SHAKE_TOTAL_DURATION <= time_shaking)
  39.146 +				{
  39.147 +					sShakeState = SHAKE_DONE;
  39.148 +					mShakeMagnitude = 0.0;
  39.149 +				}
  39.150 +				else
  39.151 +				{
  39.152 +					sShakeState = SHAKE_LEFT;
  39.153 +					F32 percent_done_shaking = (SHAKE_TOTAL_DURATION - time_shaking) / SHAKE_TOTAL_DURATION;
  39.154 +					mShakeMagnitude = SHAKE_INITIAL_MAGNITUDE * (percent_done_shaking * percent_done_shaking); // exponential decay
  39.155 +				}
  39.156 +				break;
  39.157 +
  39.158 +			default:
  39.159 +				break;
  39.160 +		}
  39.161 +		mShakeTimer.setTimerExpirySec(SHAKE_INTERVAL);
  39.162 +	}
  39.163 +}
  39.164 +
  39.165 +void LLFloaterRegionRestarting::close()
  39.166 +{
  39.167 +	LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance<LLFloaterRegionRestarting>("region_restarting");
  39.168 +
  39.169 +	if (floaterp)
  39.170 +	{
  39.171 +		floaterp->closeFloater();
  39.172 +	}
  39.173 +}
  39.174 +
  39.175 +void LLFloaterRegionRestarting::updateTime(S32 time)
  39.176 +{
  39.177 +	sSeconds = time;
  39.178 +	sShakeState = SHAKE_START;
  39.179 +}
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/indra/newview/llfloaterregionrestarting.h	Tue Feb 11 13:41:31 2014 -0500
    40.3 @@ -0,0 +1,69 @@
    40.4 +/** 
    40.5 + * @file llfloaterregionrestarting.h
    40.6 + * @brief Shows countdown timer during region restart
    40.7 + *
    40.8 + * $LicenseInfo:firstyear=2006&license=viewerlgpl$
    40.9 + * Second Life Viewer Source Code
   40.10 + * Copyright (C) 2010, Linden Research, Inc.
   40.11 + * 
   40.12 + * This library is free software; you can redistribute it and/or
   40.13 + * modify it under the terms of the GNU Lesser General Public
   40.14 + * License as published by the Free Software Foundation;
   40.15 + * version 2.1 of the License only.
   40.16 + * 
   40.17 + * This library is distributed in the hope that it will be useful,
   40.18 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   40.19 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   40.20 + * Lesser General Public License for more details.
   40.21 + * 
   40.22 + * You should have received a copy of the GNU Lesser General Public
   40.23 + * License along with this library; if not, write to the Free Software
   40.24 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
   40.25 + * 
   40.26 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
   40.27 + * $/LicenseInfo$
   40.28 + */
   40.29 +
   40.30 +#ifndef LL_LLFLOATERREGIONRESTARTING_H
   40.31 +#define LL_LLFLOATERREGIONRESTARTING_H
   40.32 +
   40.33 +#include "llfloater.h"
   40.34 +#include "lltextbox.h"
   40.35 +#include "lleventtimer.h"
   40.36 +
   40.37 +class LLFloaterRegionRestarting : public LLFloater,  public LLEventTimer
   40.38 +{
   40.39 +	friend class LLFloaterReg;
   40.40 +
   40.41 +public:
   40.42 +	static void close();
   40.43 +	static void updateTime(S32 time);
   40.44 +
   40.45 +private:
   40.46 +	LLFloaterRegionRestarting(const LLSD& key);
   40.47 +	virtual ~LLFloaterRegionRestarting();
   40.48 +	virtual BOOL postBuild();
   40.49 +	virtual BOOL tick();
   40.50 +	virtual void refresh();
   40.51 +	virtual void draw();
   40.52 +	virtual void regionChange();
   40.53 +
   40.54 +	std::string mName;
   40.55 +	U32 mShakeIterations;
   40.56 +	F32 mShakeMagnitude;
   40.57 +	LLTimer mShakeTimer;
   40.58 +
   40.59 +	boost::signals2::connection mRegionChangedConnection;
   40.60 +
   40.61 +	enum
   40.62 +	{
   40.63 +		SHAKE_START,
   40.64 +		SHAKE_LEFT,
   40.65 +		SHAKE_UP,
   40.66 +		SHAKE_RIGHT,
   40.67 +		SHAKE_DOWN,
   40.68 +		SHAKE_DONE
   40.69 +	};
   40.70 +};
   40.71 +
   40.72 +#endif // LL_LLFLOATERREGIONRESTARTING_H
    41.1 --- a/indra/newview/llfloaterworldmap.cpp	Thu Jan 30 13:17:17 2014 -0500
    41.2 +++ b/indra/newview/llfloaterworldmap.cpp	Tue Feb 11 13:41:31 2014 -0500
    41.3 @@ -627,8 +627,8 @@
    41.4  	if (!sim_info)
    41.5  	{
    41.6  		// We haven't found a region for that point yet, leave the tracking to the world map
    41.7 +		LLTracker::stopTracking(NULL);
    41.8  		LLWorldMap::getInstance()->setTracking(pos_global);
    41.9 -		LLTracker::stopTracking(NULL);
   41.10  		S32 world_x = S32(pos_global.mdV[0] / 256);
   41.11  		S32 world_y = S32(pos_global.mdV[1] / 256);
   41.12  		LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
   41.13 @@ -643,9 +643,9 @@
   41.14  	{
   41.15  		// Down region. Show the blue circle of death!
   41.16  		// i.e. let the world map that this and tell it it's invalid
   41.17 +		LLTracker::stopTracking(NULL);
   41.18  		LLWorldMap::getInstance()->setTracking(pos_global);
   41.19  		LLWorldMap::getInstance()->setTrackingInvalid();
   41.20 -		LLTracker::stopTracking(NULL);
   41.21  		setDefaultBtn("");
   41.22  		
   41.23  		// clicked on a down region - turn off coord display
   41.24 @@ -665,8 +665,8 @@
   41.25  	
   41.26  	std::string tooltip("");
   41.27  	mTrackedStatus = LLTracker::TRACKING_LOCATION;
   41.28 +	LLWorldMap::getInstance()->cancelTracking();		// The floater is taking over the tracking
   41.29  	LLTracker::trackLocation(pos_global, full_name, tooltip);
   41.30 -	LLWorldMap::getInstance()->cancelTracking();		// The floater is taking over the tracking
   41.31  	
   41.32  	LLVector3d coord_pos = LLTracker::getTrackedPositionGlobal();
   41.33  	updateTeleportCoordsDisplay( coord_pos );
    42.1 --- a/indra/newview/llinventorybridge.cpp	Thu Jan 30 13:17:17 2014 -0500
    42.2 +++ b/indra/newview/llinventorybridge.cpp	Tue Feb 11 13:41:31 2014 -0500
    42.3 @@ -74,6 +74,7 @@
    42.4  #include "llvoavatarself.h"
    42.5  #include "llwearablelist.h"
    42.6  #include "lllandmarkactions.h"
    42.7 +#include "llpanellandmarks.h"
    42.8  
    42.9  void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);
   42.10  
   42.11 @@ -1449,6 +1450,38 @@
   42.12  			}
   42.13  		}
   42.14  	}
   42.15 +	else if ("show_on_map" == action)
   42.16 +	{
   42.17 +		doActionOnCurSelectedLandmark(boost::bind(&LLItemBridge::doShowOnMap, this, _1));
   42.18 +	}
   42.19 +}
   42.20 +
   42.21 +void LLItemBridge::doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb)
   42.22 +{
   42.23 +	LLViewerInventoryItem* cur_item = getItem();
   42.24 +	if(cur_item && cur_item->getInventoryType() == LLInventoryType::IT_LANDMARK)
   42.25 +	{ 
   42.26 +		LLLandmark* landmark = LLLandmarkActions::getLandmark(cur_item->getUUID(), cb);
   42.27 +		if (landmark)
   42.28 +		{
   42.29 +			cb(landmark);
   42.30 +		}
   42.31 +	}
   42.32 +}
   42.33 +
   42.34 +void LLItemBridge::doShowOnMap(LLLandmark* landmark)
   42.35 +{
   42.36 +	LLVector3d landmark_global_pos;
   42.37 +	// landmark has already been tested for NULL by calling routine
   42.38 +	if (landmark->getGlobalPos(landmark_global_pos))
   42.39 +	{
   42.40 +		LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
   42.41 +		if (!landmark_global_pos.isExactlyZero() && worldmap_instance)
   42.42 +		{
   42.43 +			worldmap_instance->trackLocation(landmark_global_pos);
   42.44 +			LLFloaterReg::showInstance("world_map", "center");
   42.45 +		}
   42.46 +	}
   42.47  }
   42.48  
   42.49  void copy_slurl_to_clipboard_callback_inv(const std::string& slurl)
   42.50 @@ -4580,6 +4613,7 @@
   42.51  		items.push_back(std::string("Landmark Separator"));
   42.52  		items.push_back(std::string("url_copy"));
   42.53  		items.push_back(std::string("About Landmark"));
   42.54 +		items.push_back(std::string("show_on_map"));
   42.55  	}
   42.56  
   42.57  	// Disable "About Landmark" menu item for
    43.1 --- a/indra/newview/llinventorybridge.h	Thu Jan 30 13:17:17 2014 -0500
    43.2 +++ b/indra/newview/llinventorybridge.h	Tue Feb 11 13:41:31 2014 -0500
    43.3 @@ -36,6 +36,7 @@
    43.4  #include "llviewercontrol.h"
    43.5  #include "llviewerwearable.h"
    43.6  #include "lltooldraganddrop.h"
    43.7 +#include "lllandmarklist.h"
    43.8  
    43.9  class LLInventoryFilter;
   43.10  class LLInventoryPanel;
   43.11 @@ -239,7 +240,10 @@
   43.12  	BOOL confirmRemoveItem(const LLSD& notification, const LLSD& response);
   43.13  	virtual BOOL isItemPermissive() const;
   43.14  	virtual void buildDisplayName() const;
   43.15 +	void doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb);
   43.16  
   43.17 +private:
   43.18 +	void doShowOnMap(LLLandmark* landmark);
   43.19  };
   43.20  
   43.21  class LLFolderBridge : public LLInvFVBridge
    44.1 --- a/indra/newview/lllocationinputctrl.cpp	Thu Jan 30 13:17:17 2014 -0500
    44.2 +++ b/indra/newview/lllocationinputctrl.cpp	Tue Feb 11 13:41:31 2014 -0500
    44.3 @@ -407,14 +407,14 @@
    44.4  	// - Make the "Add landmark" button updated when either current parcel gets changed
    44.5  	//   or a landmark gets created or removed from the inventory.
    44.6  	// - Update the location string on parcel change.
    44.7 -	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
    44.8 +	mParcelMgrConnection = gAgent.addParcelChangedCallback(
    44.9  		boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this));
   44.10  	// LLLocationHistory instance is being created before the location input control, so we have to update initial state of button manually.
   44.11  	mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0);
   44.12  	mLocationHistoryConnection = LLLocationHistory::getInstance()->setChangedCallback(
   44.13  			boost::bind(&LLLocationInputCtrl::onLocationHistoryChanged, this,_1));
   44.14  
   44.15 -	mRegionCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLLocationInputCtrl::onRegionBoundaryCrossed, this));
   44.16 +	mRegionCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLLocationInputCtrl::onRegionBoundaryCrossed, this));
   44.17  	createNavMeshStatusListenerForCurrentRegion();
   44.18  
   44.19  	mRemoveLandmarkObserver	= new LLRemoveLandmarkObserver(this);
    45.1 --- a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp	Thu Jan 30 13:17:17 2014 -0500
    45.2 +++ b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp	Tue Feb 11 13:41:31 2014 -0500
    45.3 @@ -79,7 +79,7 @@
    45.4  
    45.5  		if ( !mRegionCrossingSlot.connected() )
    45.6  		{
    45.7 -			mRegionCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed, this));
    45.8 +			mRegionCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed, this));
    45.9  		}
   45.10  
   45.11  		if (!mAgentStateSlot.connected())
    46.1 --- a/indra/newview/llmoveview.cpp	Thu Jan 30 13:17:17 2014 -0500
    46.2 +++ b/indra/newview/llmoveview.cpp	Tue Feb 11 13:41:31 2014 -0500
    46.3 @@ -140,7 +140,7 @@
    46.4  
    46.5  	initMovementMode();
    46.6  
    46.7 -	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(LLFloaterMove::sUpdateFlyingStatus);
    46.8 +	gAgent.addParcelChangedCallback(LLFloaterMove::sUpdateFlyingStatus);
    46.9  
   46.10  	return TRUE;
   46.11  }
    47.1 --- a/indra/newview/llpanelplaces.cpp	Thu Jan 30 13:17:17 2014 -0500
    47.2 +++ b/indra/newview/llpanelplaces.cpp	Tue Feb 11 13:41:31 2014 -0500
    47.3 @@ -251,7 +251,7 @@
    47.4  
    47.5  	gInventory.addObserver(mInventoryObserver);
    47.6  
    47.7 -	mAgentParcelChangedConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
    47.8 +	mAgentParcelChangedConnection = gAgent.addParcelChangedCallback(
    47.9  			boost::bind(&LLPanelPlaces::updateVerbs, this));
   47.10  
   47.11  	//buildFromFile( "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
    48.1 --- a/indra/newview/llpanelteleporthistory.cpp	Thu Jan 30 13:17:17 2014 -0500
    48.2 +++ b/indra/newview/llpanelteleporthistory.cpp	Tue Feb 11 13:41:31 2014 -0500
    48.3 @@ -359,6 +359,11 @@
    48.4  void LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback(const std::string& slurl)
    48.5  {
    48.6  	LLClipboard::instance().copyToClipboard(utf8str_to_wstring(slurl),0,slurl.size());
    48.7 +
    48.8 +	LLSD args;
    48.9 +	args["SLURL"] = slurl;
   48.10 +
   48.11 +	LLNotificationsUtil::add("CopySLURL", args);
   48.12  }
   48.13  
   48.14  void LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard()
    49.1 --- a/indra/newview/llpaneltopinfobar.cpp	Thu Jan 30 13:17:17 2014 -0500
    49.2 +++ b/indra/newview/llpaneltopinfobar.cpp	Tue Feb 11 13:41:31 2014 -0500
    49.3 @@ -166,7 +166,7 @@
    49.4  		mShowCoordsCtrlConnection = ctrl->getSignal()->connect(boost::bind(&LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged, this));
    49.5  	}
    49.6  
    49.7 -	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
    49.8 +	mParcelMgrConnection = gAgent.addParcelChangedCallback(
    49.9  			boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this));
   49.10  
   49.11  	setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChange, this, _2));
    50.1 --- a/indra/newview/lltracker.cpp	Thu Jan 30 13:17:17 2014 -0500
    50.2 +++ b/indra/newview/lltracker.cpp	Tue Feb 11 13:41:31 2014 -0500
    50.3 @@ -167,6 +167,7 @@
    50.4  	}
    50.5  	
    50.6  	static LLUIColor map_track_color = LLUIColorTable::instance().getColor("MapTrackColor", LLColor4::white);
    50.7 +	static LLUIColor map_track_color_under = LLUIColorTable::instance().getColor("MapTrackColorUnder", LLColor4::white);
    50.8  	
    50.9  	// Arbitary location beacon
   50.10  	if( instance()->mIsTrackingLocation )
   50.11 @@ -187,7 +188,7 @@
   50.12  		}
   50.13  		else
   50.14  		{
   50.15 -			renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, 
   50.16 +			renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, map_track_color_under,
   50.17  					  	instance()->mBeaconText, instance()->mTrackedLocationName );
   50.18  		}
   50.19  	}
   50.20 @@ -229,7 +230,7 @@
   50.21  					// and back again
   50.22  					instance()->mHasReachedLandmark = FALSE;
   50.23  				}
   50.24 -				renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, 
   50.25 +				renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, map_track_color_under,
   50.26  							  instance()->mBeaconText, instance()->mTrackedLandmarkName );
   50.27  			}
   50.28  		}
   50.29 @@ -258,7 +259,7 @@
   50.30  			}
   50.31  			else
   50.32  			{
   50.33 -				renderBeacon( av_tracker.getGlobalPos(), map_track_color, 
   50.34 +				renderBeacon( av_tracker.getGlobalPos(), map_track_color, map_track_color_under,
   50.35  						  	instance()->mBeaconText, av_tracker.getName() );
   50.36  			}
   50.37  		}
   50.38 @@ -412,7 +413,7 @@
   50.39  	return instance()->mTrackedLocationName;
   50.40  }
   50.41  
   50.42 -F32 pulse_func(F32 t, F32 z)
   50.43 +F32 pulse_func(F32 t, F32 z, bool tracking_avatar, std::string direction)
   50.44  {
   50.45  	if (!LLTracker::sCheesyBeacon)
   50.46  	{
   50.47 @@ -420,8 +421,15 @@
   50.48  	}
   50.49  	
   50.50  	t *= F_PI;
   50.51 -	z -= t*64.f - 256.f;
   50.52 -	
   50.53 +	if ("DOWN" == direction)
   50.54 +	{
   50.55 +		z += t*64.f - 256.f;
   50.56 +	}
   50.57 +	else
   50.58 +	{
   50.59 +		z -= t*64.f - 256.f;
   50.60 +	}
   50.61 +
   50.62  	F32 a = cosf(z*F_PI/512.f)*10.0f;
   50.63  	a = llmax(a, 9.9f);
   50.64  	a -= 9.9f;
   50.65 @@ -474,10 +482,78 @@
   50.66  	gGL.end();
   50.67  }
   50.68  
   50.69 +void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 fogged_color, F32 dist)
   50.70 +{
   50.71 +	const U32 BEACON_VERTS = 256;
   50.72 +	F32 step;
   50.73 +
   50.74 +	gGL.matrixMode(LLRender::MM_MODELVIEW);
   50.75 +	gGL.pushMatrix();
   50.76 +
   50.77 +	if ("DOWN" == direction)
   50.78 +	{
   50.79 +		gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]);
   50.80 +		draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, fogged_color);
   50.81 +		step = (5020.0f - pos_agent.mV[2]) / BEACON_VERTS;
   50.82 +	}
   50.83 +	else
   50.84 +	{
   50.85 +		gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], 0);
   50.86 +		step = pos_agent.mV[2] / BEACON_VERTS;
   50.87 +	}
   50.88 +
   50.89 +	gGL.color4fv(fogged_color.mV);
   50.90 +
   50.91 +	LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis();
   50.92 +	F32 t = gRenderStartTime.getElapsedTimeF32();
   50.93 +
   50.94 +	for (U32 i = 0; i < BEACON_VERTS; i++)
   50.95 +	{
   50.96 +		F32 x = x_axis.mV[0];
   50.97 +		F32 y = x_axis.mV[1];
   50.98 +			
   50.99 +		F32 z = i * step;
  50.100 +		F32 z_next = (i+1)*step;
  50.101 +
  50.102 +		bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR;
  50.103 +		F32 a = pulse_func(t, z, tracking_avatar, direction);
  50.104 +		F32 an = pulse_func(t, z_next, tracking_avatar, direction);
  50.105 +
  50.106 +		LLColor4 c_col = fogged_color + LLColor4(a,a,a,a);
  50.107 +		LLColor4 col_next = fogged_color + LLColor4(an,an,an,an);
  50.108 +		LLColor4 col_edge = fogged_color * LLColor4(a,a,a,0.0f);
  50.109 +		LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f);
  50.110 +
  50.111 +		a *= 2.f;
  50.112 +		a += 1.0f;
  50.113 +
  50.114 +		an *= 2.f;
  50.115 +		an += 1.0f;
  50.116 +
  50.117 +		gGL.begin(LLRender::TRIANGLE_STRIP);
  50.118 +		gGL.color4fv(col_edge.mV);
  50.119 +		gGL.vertex3f(-x*a, -y*a, z);
  50.120 +		gGL.color4fv(col_edge_next.mV);
  50.121 +		gGL.vertex3f(-x*an, -y*an, z_next);
  50.122 +
  50.123 +		gGL.color4fv(c_col.mV);
  50.124 +		gGL.vertex3f(0, 0, z);
  50.125 +		gGL.color4fv(col_next.mV);
  50.126 +		gGL.vertex3f(0, 0, z_next);
  50.127 +
  50.128 +		gGL.color4fv(col_edge.mV);
  50.129 +		gGL.vertex3f(x*a,y*a,z);
  50.130 +		gGL.color4fv(col_edge_next.mV);
  50.131 +		gGL.vertex3f(x*an,y*an,z_next);
  50.132 +		gGL.end();
  50.133 +	}
  50.134 +	gGL.popMatrix();
  50.135 +}
  50.136  
  50.137  // static 
  50.138  void LLTracker::renderBeacon(LLVector3d pos_global, 
  50.139 -							 const LLColor4& color, 
  50.140 +							 const LLColor4& color,
  50.141 +							 const LLColor4& color_under,
  50.142  							 LLHUDText* hud_textp, 
  50.143  							 const std::string& label )
  50.144  {
  50.145 @@ -497,9 +573,11 @@
  50.146  	}
  50.147  
  50.148  	LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor();
  50.149 +	LLColor4 fogged_color_under = color_frac * color_under + (1 - color_frac) * gSky.getFogColor();
  50.150  
  50.151  	F32 FADE_DIST = 3.f;
  50.152  	fogged_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST));
  50.153 +	fogged_color_under.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST));
  50.154  
  50.155  	LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(pos_global);
  50.156  
  50.157 @@ -508,64 +586,8 @@
  50.158  	LLGLDisable cull_face(GL_CULL_FACE);
  50.159  	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
  50.160  	
  50.161 -	
  50.162 -	gGL.matrixMode(LLRender::MM_MODELVIEW);
  50.163 -	gGL.pushMatrix();
  50.164 -	{
  50.165 -		gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]);
  50.166 -		
  50.167 -		draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, fogged_color);
  50.168 -
  50.169 -		gGL.color4fv(fogged_color.mV);
  50.170 -		const U32 BEACON_VERTS = 256;
  50.171 -		const F32 step = 1024.0f/BEACON_VERTS;
  50.172 -		
  50.173 -		LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis();
  50.174 -		F32 t = gRenderStartTime.getElapsedTimeF32();
  50.175 -		F32 dr = dist/LLViewerCamera::getInstance()->getFar();
  50.176 -		
  50.177 -		for (U32 i = 0; i < BEACON_VERTS; i++)
  50.178 -		{
  50.179 -			F32 x = x_axis.mV[0];
  50.180 -			F32 y = x_axis.mV[1];
  50.181 -			
  50.182 -			F32 z = i * step;
  50.183 -			F32 z_next = (i+1)*step;
  50.184 -		
  50.185 -			F32 a = pulse_func(t, z);
  50.186 -			F32 an = pulse_func(t, z_next);
  50.187 -			
  50.188 -			LLColor4 c_col = fogged_color + LLColor4(a,a,a,a);
  50.189 -			LLColor4 col_next = fogged_color + LLColor4(an,an,an,an);
  50.190 -			LLColor4 col_edge = fogged_color * LLColor4(a,a,a,0.0f);
  50.191 -			LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f);
  50.192 -			
  50.193 -			a *= 2.f;
  50.194 -			a += 1.0f+dr;
  50.195 -			
  50.196 -			an *= 2.f;
  50.197 -			an += 1.0f+dr;
  50.198 -		
  50.199 -			gGL.begin(LLRender::TRIANGLE_STRIP);
  50.200 -			gGL.color4fv(col_edge.mV);
  50.201 -			gGL.vertex3f(-x*a, -y*a, z);
  50.202 -			gGL.color4fv(col_edge_next.mV);
  50.203 -			gGL.vertex3f(-x*an, -y*an, z_next);
  50.204 -			
  50.205 -			gGL.color4fv(c_col.mV);
  50.206 -			gGL.vertex3f(0, 0, z);
  50.207 -			gGL.color4fv(col_next.mV);
  50.208 -			gGL.vertex3f(0, 0, z_next);
  50.209 -			
  50.210 -			gGL.color4fv(col_edge.mV);
  50.211 -			gGL.vertex3f(x*a,y*a,z);
  50.212 -			gGL.color4fv(col_edge_next.mV);
  50.213 -			gGL.vertex3f(x*an,y*an,z_next);
  50.214 -			
  50.215 -			gGL.end();
  50.216 -		}
  50.217 -	}
  50.218 -	gGL.popMatrix();
  50.219 +	LLTracker::drawBeacon(pos_agent, "DOWN", fogged_color, dist);
  50.220 +	LLTracker::drawBeacon(pos_agent, "UP", fogged_color_under, dist);
  50.221  
  50.222  	std::string text;
  50.223  	text = llformat( "%.0f m", to_vec.magVec());
    51.1 --- a/indra/newview/lltracker.h	Thu Jan 30 13:17:17 2014 -0500
    51.2 +++ b/indra/newview/lltracker.h	Tue Feb 11 13:41:31 2014 -0500
    51.3 @@ -108,8 +108,10 @@
    51.4  	LLTracker();
    51.5  	~LLTracker();
    51.6  
    51.7 +	static void drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 fogged_color, F32 dist);
    51.8  	static void renderBeacon( LLVector3d pos_global, 
    51.9  							 const LLColor4& color, 
   51.10 +							 const LLColor4& color_under,
   51.11  							 LLHUDText* hud_textp, 
   51.12  							 const std::string& label );
   51.13  
    52.1 --- a/indra/newview/llvieweraudio.cpp	Thu Jan 30 13:17:17 2014 -0500
    52.2 +++ b/indra/newview/llvieweraudio.cpp	Tue Feb 11 13:41:31 2014 -0500
    52.3 @@ -368,6 +368,7 @@
    52.4  		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTyping")));
    52.5  		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowClose")));
    52.6  		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowOpen")));
    52.7 +		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndRestart")));
    52.8  	}
    52.9  
   52.10  	audio_update_volume(true);
    53.1 --- a/indra/newview/llviewerfloaterreg.cpp	Thu Jan 30 13:17:17 2014 -0500
    53.2 +++ b/indra/newview/llviewerfloaterreg.cpp	Tue Feb 11 13:41:31 2014 -0500
    53.3 @@ -95,6 +95,7 @@
    53.4  #include "llfloaterproperties.h"
    53.5  #include "llfloaterregiondebugconsole.h"
    53.6  #include "llfloaterregioninfo.h"
    53.7 +#include "llfloaterregionrestarting.h"
    53.8  #include "llfloaterreporter.h"
    53.9  #include "llfloaterscriptdebug.h"
   53.10  #include "llfloaterscriptlimits.h"
   53.11 @@ -296,6 +297,7 @@
   53.12  	LLFloaterReg::add("reset_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterResetQueue>);
   53.13  	LLFloaterReg::add("region_debug_console", "floater_region_debug_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionDebugConsole>);
   53.14  	LLFloaterReg::add("region_info", "floater_region_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionInfo>);
   53.15 +	LLFloaterReg::add("region_restarting", "floater_region_restarting.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionRestarting>);
   53.16  	
   53.17  	LLFloaterReg::add("script_debug", "floater_script_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebug>);
   53.18  	LLFloaterReg::add("script_debug_output", "floater_script_debug_panel.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebugOutput>);
    54.1 --- a/indra/newview/llviewermenu.cpp	Thu Jan 30 13:17:17 2014 -0500
    54.2 +++ b/indra/newview/llviewermenu.cpp	Tue Feb 11 13:41:31 2014 -0500
    54.3 @@ -1025,6 +1025,10 @@
    54.4  	{
    54.5  		return LLPipeline::RENDER_DEBUG_AVATAR_VOLUME;
    54.6  	}
    54.7 +	else if ("joints" == info_display)
    54.8 +	{
    54.9 +		return LLPipeline::RENDER_DEBUG_AVATAR_JOINTS;
   54.10 +	}
   54.11  	else if ("raycast" == info_display)
   54.12  	{
   54.13  		return LLPipeline::RENDER_DEBUG_RAYCAST;
    55.1 --- a/indra/newview/llviewermessage.cpp	Thu Jan 30 13:17:17 2014 -0500
    55.2 +++ b/indra/newview/llviewermessage.cpp	Tue Feb 11 13:41:31 2014 -0500
    55.3 @@ -111,6 +111,7 @@
    55.4  #include "llpanelblockedlist.h"
    55.5  #include "llpanelplaceprofile.h"
    55.6  #include "llviewerregion.h"
    55.7 +#include "llfloaterregionrestarting.h"
    55.8  
    55.9  #include <boost/algorithm/string/split.hpp> //
   55.10  #include <boost/regex.hpp>
   55.11 @@ -5741,7 +5742,6 @@
   55.12  	std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
   55.13  	LLStringUtil::toLower(regionMaturity);
   55.14  	llsdBlock["REGIONMATURITY"] = regionMaturity;
   55.15 -	
   55.16  	bool returnValue = false;
   55.17  	LLNotificationPtr maturityLevelNotification;
   55.18  	std::string notifySuffix = "_Notify";
   55.19 @@ -5911,6 +5911,7 @@
   55.20  			(notificationID == "RegionEntryAccessBlocked") ||
   55.21  			(notificationID == "LandClaimAccessBlocked") ||
   55.22  			(notificationID == "LandBuyAccessBlocked")
   55.23 +
   55.24  		   )
   55.25  		{
   55.26  			/*---------------------------------------------------------------------
   55.27 @@ -5952,7 +5953,41 @@
   55.28  			snap_filename += SCREEN_HOME_FILENAME;
   55.29  			gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE);
   55.30  		}
   55.31 -		
   55.32 +
   55.33 +		if (notificationID == "RegionRestartMinutes" ||
   55.34 +			notificationID == "RegionRestartSeconds")
   55.35 +		{
   55.36 +			S32 seconds;
   55.37 +			if (notificationID == "RegionRestartMinutes")
   55.38 +			{
   55.39 +				seconds = 60 * static_cast<S32>(llsdBlock["MINUTES"].asInteger());
   55.40 +			}
   55.41 +			else
   55.42 +			{
   55.43 +				seconds = static_cast<S32>(llsdBlock["SECONDS"].asInteger());
   55.44 +			}
   55.45 +
   55.46 +			LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance<LLFloaterRegionRestarting>("region_restarting");
   55.47 +
   55.48 +			if (floaterp)
   55.49 +			{
   55.50 +				LLFloaterRegionRestarting::updateTime(seconds);
   55.51 +			}
   55.52 +			else
   55.53 +			{
   55.54 +				LLSD params;
   55.55 +				params["NAME"] = llsdBlock["NAME"];
   55.56 +				params["SECONDS"] = (LLSD::Integer)seconds;
   55.57 +				LLFloaterRegionRestarting* restarting_floater = dynamic_cast<LLFloaterRegionRestarting*>(LLFloaterReg::showInstance("region_restarting", params));
   55.58 +				if(restarting_floater)
   55.59 +				{
   55.60 +					restarting_floater->center();
   55.61 +				}
   55.62 +			}
   55.63 +
   55.64 +			send_sound_trigger(LLUUID(gSavedSettings.getString("UISndRestart")), 1.0f);
   55.65 +		}
   55.66 +
   55.67  		LLNotificationsUtil::add(notificationID, llsdBlock);
   55.68  		return true;
   55.69  	}	
   55.70 @@ -6012,7 +6047,6 @@
   55.71  		
   55.72  	std::string message;
   55.73  	msgsystem->getStringFast(_PREHASH_AlertData, _PREHASH_Message, message);
   55.74 -
   55.75  	process_special_alert_messages(message);
   55.76  
   55.77  	if (!attempt_standard_notification(msgsystem))
   55.78 @@ -6036,7 +6070,6 @@
   55.79  bool handle_special_alerts(const std::string &pAlertName)
   55.80  {
   55.81  	bool isHandled = false;
   55.82 -
   55.83  	if (LLStringUtil::compareStrings(pAlertName, "NotAgeVerified") == 0)
   55.84  	{
   55.85  		
   55.86 @@ -6072,26 +6105,17 @@
   55.87  		// System message is important, show in upper-right box not tip
   55.88  		std::string text(message.substr(1));
   55.89  		LLSD args;
   55.90 -		if (text.substr(0,17) == "RESTART_X_MINUTES")
   55.91 -		{
   55.92 -			S32 mins = 0;
   55.93 -			LLStringUtil::convertToS32(text.substr(18), mins);
   55.94 -			args["MINUTES"] = llformat("%d",mins);
   55.95 -			LLNotificationsUtil::add("RegionRestartMinutes", args);
   55.96 -		}
   55.97 -		else if (text.substr(0,17) == "RESTART_X_SECONDS")
   55.98 -		{
   55.99 -			S32 secs = 0;
  55.100 -			LLStringUtil::convertToS32(text.substr(18), secs);
  55.101 -			args["SECONDS"] = llformat("%d",secs);
  55.102 -			LLNotificationsUtil::add("RegionRestartSeconds", args);
  55.103 -		}
  55.104 -		else
  55.105 -		{
  55.106 -			std::string new_msg =LLNotifications::instance().getGlobalString(text);
  55.107 -			args["MESSAGE"] = new_msg;
  55.108 -			LLNotificationsUtil::add("SystemMessage", args);
  55.109 -		}
  55.110 +
  55.111 +		// *NOTE: If the text from the server ever changes this line will need to be adjusted.
  55.112 +		std::string restart_cancelled = "Region restart cancelled.";
  55.113 +		if (text.substr(0, restart_cancelled.length()) == restart_cancelled)
  55.114 +		{
  55.115 +			LLFloaterRegionRestarting::close();
  55.116 +		}
  55.117 +
  55.118 +		std::string new_msg =LLNotifications::instance().getGlobalString(text);
  55.119 +		args["MESSAGE"] = new_msg;
  55.120 +		LLNotificationsUtil::add("SystemMessage", args);
  55.121  	}
  55.122  	else if (modal)
  55.123  	{
    56.1 --- a/indra/newview/llviewerparcelmgr.cpp	Thu Jan 30 13:17:17 2014 -0500
    56.2 +++ b/indra/newview/llviewerparcelmgr.cpp	Tue Feb 11 13:41:31 2014 -0500
    56.3 @@ -1580,7 +1580,8 @@
    56.4  			// Let interesting parties know about agent parcel change.
    56.5  			LLViewerParcelMgr* instance = LLViewerParcelMgr::getInstance();
    56.6  
    56.7 -			instance->mAgentParcelChangedSignal();
    56.8 +			// Notify anything that wants to know when the agent changes parcels
    56.9 +			gAgent.changeParcels();
   56.10  
   56.11  			if (instance->mTeleportInProgress)
   56.12  			{
   56.13 @@ -2458,10 +2459,6 @@
   56.14  	return sPassImage;
   56.15  }
   56.16  
   56.17 -boost::signals2::connection LLViewerParcelMgr::addAgentParcelChangedCallback(parcel_changed_callback_t cb)
   56.18 -{
   56.19 -	return mAgentParcelChangedSignal.connect(cb);
   56.20 -}
   56.21  /*
   56.22   * Set finish teleport callback. You can use it to observe all  teleport events.
   56.23   * NOTE:
   56.24 @@ -2475,7 +2472,7 @@
   56.25  	return mTeleportFinishedSignal.connect(cb);
   56.26  }
   56.27  
   56.28 -boost::signals2::connection LLViewerParcelMgr::setTeleportFailedCallback(parcel_changed_callback_t cb)
   56.29 +boost::signals2::connection LLViewerParcelMgr::setTeleportFailedCallback(teleport_failed_callback_t cb)
   56.30  {
   56.31  	return mTeleportFailedSignal.connect(cb);
   56.32  }
    57.1 --- a/indra/newview/llviewerparcelmgr.h	Thu Jan 30 13:17:17 2014 -0500
    57.2 +++ b/indra/newview/llviewerparcelmgr.h	Tue Feb 11 13:41:31 2014 -0500
    57.3 @@ -80,8 +80,8 @@
    57.4  public:
    57.5  	typedef boost::function<void (const LLVector3d&, const bool& local)> teleport_finished_callback_t;
    57.6  	typedef boost::signals2::signal<void (const LLVector3d&, const bool&)> teleport_finished_signal_t;
    57.7 -	typedef boost::function<void()> parcel_changed_callback_t;
    57.8 -	typedef boost::signals2::signal<void()> parcel_changed_signal_t;
    57.9 +	typedef boost::function<void()> teleport_failed_callback_t;
   57.10 +	typedef boost::signals2::signal<void()> teleport_failed_signal_t;
   57.11  
   57.12  	LLViewerParcelMgr();
   57.13  	~LLViewerParcelMgr();
   57.14 @@ -283,9 +283,8 @@
   57.15  	// the agent is banned or not in the allowed group
   57.16  	BOOL isCollisionBanned();
   57.17  
   57.18 -	boost::signals2::connection addAgentParcelChangedCallback(parcel_changed_callback_t cb);
   57.19  	boost::signals2::connection setTeleportFinishedCallback(teleport_finished_callback_t cb);
   57.20 -	boost::signals2::connection setTeleportFailedCallback(parcel_changed_callback_t cb);
   57.21 +	boost::signals2::connection setTeleportFailedCallback(teleport_failed_callback_t cb);
   57.22  	void onTeleportFinished(bool local, const LLVector3d& new_pos);
   57.23  	void onTeleportFailed();
   57.24  
   57.25 @@ -338,8 +337,7 @@
   57.26  
   57.27  	BOOL						mTeleportInProgress;
   57.28  	teleport_finished_signal_t	mTeleportFinishedSignal;
   57.29 -	parcel_changed_signal_t		mTeleportFailedSignal;
   57.30 -	parcel_changed_signal_t		mAgentParcelChangedSignal;
   57.31 +	teleport_failed_signal_t	mTeleportFailedSignal;
   57.32  
   57.33  	// Array of pieces of parcel edges to potentially draw
   57.34  	// Has (parcels_per_edge + 1) * (parcels_per_edge + 1) elements so
    58.1 --- a/indra/newview/llvoavatar.cpp	Thu Jan 30 13:17:17 2014 -0500
    58.2 +++ b/indra/newview/llvoavatar.cpp	Tue Feb 11 13:41:31 2014 -0500
    58.3 @@ -1392,9 +1392,11 @@
    58.4  //-----------------------------------------------------------------------------
    58.5  void LLVOAvatar::renderCollisionVolumes()
    58.6  {
    58.7 +	std::ostringstream ostr;
    58.8  	for (S32 i = 0; i < mNumCollisionVolumes; i++)
    58.9  	{
   58.10  		mCollisionVolumes[i].renderCollision();
   58.11 +		ostr << mCollisionVolumes[i].getName() << ", ";
   58.12  	}
   58.13  
   58.14  	if (mNameText.notNull())
   58.15 @@ -1403,6 +1405,96 @@
   58.16  	
   58.17  		mNameText->lineSegmentIntersect(unused, unused, unused, TRUE);
   58.18  	}
   58.19 +
   58.20 +	mDebugText.clear();
   58.21 +	addDebugText(ostr.str());
   58.22 +}
   58.23 +
   58.24 +void LLVOAvatar::renderJoints()
   58.25 +{
   58.26 +	std::ostringstream ostr;
   58.27 +	std::ostringstream nullstr;
   58.28 +
   58.29 +	for (joint_map_t::iterator iter = mJointMap.begin(); iter != mJointMap.end(); ++iter)
   58.30 +	{
   58.31 +		LLJoint* jointp = iter->second;
   58.32 +		if (!jointp)
   58.33 +		{
   58.34 +			nullstr << iter->first << " is NULL" << std::endl;
   58.35 +			continue;
   58.36 +		}
   58.37 +
   58.38 +		ostr << jointp->getName() << ", ";
   58.39 +
   58.40 +		jointp->updateWorldMatrix();
   58.41 +	
   58.42 +		gGL.pushMatrix();
   58.43 +		gGL.multMatrix( &jointp->getXform()->getWorldMatrix().mMatrix[0][0] );
   58.44 +
   58.45 +		gGL.diffuseColor3f( 1.f, 0.f, 1.f );
   58.46 +	
   58.47 +		gGL.begin(LLRender::LINES);
   58.48 +	
   58.49 +		LLVector3 v[] = 
   58.50 +		{
   58.51 +			LLVector3(1,0,0),
   58.52 +			LLVector3(-1,0,0),
   58.53 +			LLVector3(0,1,0),
   58.54 +			LLVector3(0,-1,0),
   58.55 +
   58.56 +			LLVector3(0,0,-1),
   58.57 +			LLVector3(0,0,1),
   58.58 +		};
   58.59 +
   58.60 +		//sides
   58.61 +		gGL.vertex3fv(v[0].mV); 
   58.62 +		gGL.vertex3fv(v[2].mV);
   58.63 +
   58.64 +		gGL.vertex3fv(v[0].mV); 
   58.65 +		gGL.vertex3fv(v[3].mV);
   58.66 +
   58.67 +		gGL.vertex3fv(v[1].mV); 
   58.68 +		gGL.vertex3fv(v[2].mV);
   58.69 +
   58.70 +		gGL.vertex3fv(v[1].mV); 
   58.71 +		gGL.vertex3fv(v[3].mV);
   58.72 +
   58.73 +
   58.74 +		//top
   58.75 +		gGL.vertex3fv(v[0].mV); 
   58.76 +		gGL.vertex3fv(v[4].mV);
   58.77 +
   58.78 +		gGL.vertex3fv(v[1].mV); 
   58.79 +		gGL.vertex3fv(v[4].mV);
   58.80 +
   58.81 +		gGL.vertex3fv(v[2].mV); 
   58.82 +		gGL.vertex3fv(v[4].mV);
   58.83 +
   58.84 +		gGL.vertex3fv(v[3].mV); 
   58.85 +		gGL.vertex3fv(v[4].mV);
   58.86 +
   58.87 +
   58.88 +		//bottom
   58.89 +		gGL.vertex3fv(v[0].mV); 
   58.90 +		gGL.vertex3fv(v[5].mV);
   58.91 +
   58.92 +		gGL.vertex3fv(v[1].mV); 
   58.93 +		gGL.vertex3fv(v[5].mV);
   58.94 +
   58.95 +		gGL.vertex3fv(v[2].mV); 
   58.96 +		gGL.vertex3fv(v[5].mV);
   58.97 +
   58.98 +		gGL.vertex3fv(v[3].mV); 
   58.99 +		gGL.vertex3fv(v[5].mV);
  58.100 +
  58.101 +		gGL.end();
  58.102 +
  58.103 +		gGL.popMatrix();
  58.104 +	}
  58.105 +
  58.106 +	mDebugText.clear();
  58.107 +	addDebugText(ostr.str());
  58.108 +	addDebugText(nullstr.str());
  58.109  }
  58.110  
  58.111  BOOL LLVOAvatar::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
  58.112 @@ -3077,9 +3169,6 @@
  58.113  //------------------------------------------------------------------------
  58.114  BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
  58.115  {
  58.116 -	// clear debug text
  58.117 -	mDebugText.clear();
  58.118 -
  58.119  	if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"))
  58.120  	{
  58.121  		S32 central_bake_version = -1;
  58.122 @@ -3588,6 +3677,7 @@
  58.123  	{
  58.124  		setDebugText(mDebugText);
  58.125  	}
  58.126 +	mDebugText.clear();
  58.127  
  58.128  	//mesh vertices need to be reskinned
  58.129  	mNeedsSkin = TRUE;
    59.1 --- a/indra/newview/llvoavatar.h	Thu Jan 30 13:17:17 2014 -0500
    59.2 +++ b/indra/newview/llvoavatar.h	Tue Feb 11 13:41:31 2014 -0500
    59.3 @@ -406,6 +406,7 @@
    59.4  	F32			getLastSkinTime() { return mLastSkinTime; }
    59.5  	U32 		renderTransparent(BOOL first_pass);
    59.6  	void 		renderCollisionVolumes();
    59.7 +	void		renderJoints();
    59.8  	static void	deleteCachedImages(bool clearAll=true);
    59.9  	static void	destroyGL();
   59.10  	static void	restoreGL();
    60.1 --- a/indra/newview/pipeline.h	Thu Jan 30 13:17:17 2014 -0500
    60.2 +++ b/indra/newview/pipeline.h	Tue Feb 11 13:41:31 2014 -0500
    60.3 @@ -535,15 +535,16 @@
    60.4  		RENDER_DEBUG_SHADOW_FRUSTA		= 0x00040000,
    60.5  		RENDER_DEBUG_SCULPTED           = 0x00080000,
    60.6  		RENDER_DEBUG_AVATAR_VOLUME      = 0x00100000,
    60.7 -		RENDER_DEBUG_BUILD_QUEUE		= 0x00200000,
    60.8 -		RENDER_DEBUG_AGENT_TARGET       = 0x00400000,
    60.9 -		RENDER_DEBUG_UPDATE_TYPE		= 0x00800000,
   60.10 -		RENDER_DEBUG_PHYSICS_SHAPES     = 0x01000000,
   60.11 -		RENDER_DEBUG_NORMALS	        = 0x02000000,
   60.12 -		RENDER_DEBUG_LOD_INFO	        = 0x04000000,
   60.13 -		RENDER_DEBUG_RENDER_COMPLEXITY  = 0x08000000,
   60.14 -		RENDER_DEBUG_ATTACHMENT_BYTES	= 0x10000000,
   60.15 -		RENDER_DEBUG_TEXEL_DENSITY		= 0x20000000
   60.16 +		RENDER_DEBUG_AVATAR_JOINTS      = 0x00200000,
   60.17 +		RENDER_DEBUG_BUILD_QUEUE		= 0x00400000,
   60.18 +		RENDER_DEBUG_AGENT_TARGET       = 0x00800000,
   60.19 +		RENDER_DEBUG_UPDATE_TYPE		= 0x01000000,
   60.20 +		RENDER_DEBUG_PHYSICS_SHAPES     = 0x02000000,
   60.21 +		RENDER_DEBUG_NORMALS	        = 0x04000000,
   60.22 +		RENDER_DEBUG_LOD_INFO	        = 0x08000000,
   60.23 +		RENDER_DEBUG_RENDER_COMPLEXITY  = 0x10000000,
   60.24 +		RENDER_DEBUG_ATTACHMENT_BYTES	= 0x20000000,
   60.25 +		RENDER_DEBUG_TEXEL_DENSITY		= 0x40000000
   60.26  	};
   60.27  
   60.28  public:
    61.1 --- a/indra/newview/skins/default/colors.xml	Thu Jan 30 13:17:17 2014 -0500
    61.2 +++ b/indra/newview/skins/default/colors.xml	Tue Feb 11 13:41:31 2014 -0500
    61.3 @@ -122,6 +122,9 @@
    61.4    <color
    61.5        name="Blue_80"
    61.6        value="0 0 1 0.8" />
    61.7 +  <color
    61.8 +      name="Orange"
    61.9 +      value="1 .82 .46 1" />
   61.10  
   61.11    <!-- This color name makes potentially unused colors show up bright purple.
   61.12    Leave this here until all Unused? are removed below, otherwise
   61.13 @@ -511,6 +514,9 @@
   61.14       name="MapTrackColor"
   61.15       reference="Red" />
   61.16      <color
   61.17 +     name="MapTrackColorUnder"
   61.18 +     reference="Blue" />
   61.19 +    <color
   61.20       name="MapTrackDisabledColor"
   61.21       value="0.5 0 0 1" />
   61.22      <color
    62.1 --- a/indra/newview/skins/default/textures/textures.xml	Thu Jan 30 13:17:17 2014 -0500
    62.2 +++ b/indra/newview/skins/default/textures/textures.xml	Tue Feb 11 13:41:31 2014 -0500
    62.3 @@ -153,8 +153,6 @@
    62.4    <texture name="Command_Speak_Icon"        file_name="toolbar_icons/speak.png"        preload="true" />
    62.5    <texture name="Command_View_Icon"         file_name="toolbar_icons/view.png"         preload="true" />
    62.6    <texture name="Command_Voice_Icon"        file_name="toolbar_icons/nearbyvoice.png"  preload="true" />
    62.7 -  <texture name="Command_Highlighting_Icon" file_name="toolbar_icons/highlighting.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
    62.8 -  <texture name="Command_Highlighting_Selected_Icon" file_name="toolbar_icons/highlighting_selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
    62.9    <texture name="Caret_Bottom_Icon"         file_name="toolbar_icons/caret_bottom.png" preload="true" scale.left="1" scale.top="23" scale.right="15" scale.bottom="1" />
   62.10    <texture name="Caret_Right_Icon"          file_name="toolbar_icons/caret_right.png"  preload="true" scale.left="5" scale.top="15" scale.right="28" scale.bottom="1" />
   62.11    <texture name="Caret_Left_Icon"           file_name="toolbar_icons/caret_left.png"   preload="true" scale.left="1" scale.top="15" scale.right="23" scale.bottom="1" />
   62.12 @@ -165,7 +163,6 @@
   62.13    <texture name="ComboButton_On" file_name="widgets/ComboButton_On.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   62.14    <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   62.15    <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   62.16 -  <texture name="ComboButton_Hovered" file_name="widgets/ComboButton_Hover.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   62.17  
   62.18    <texture name="Container" file_name="containers/Container.png" preload="false" />
   62.19  
    63.1 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml	Thu Jan 30 13:17:17 2014 -0500
    63.2 +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml	Tue Feb 11 13:41:31 2014 -0500
    63.3 @@ -210,7 +210,7 @@
    63.4                       default_tab_group="3"
    63.5                       tab_group="2"
    63.6                       name="right_part_holder"
    63.7 -                     min_width="172">
    63.8 +                     min_width="230">
    63.9                          <layout_stack
   63.10                           animate="true" 
   63.11                           default_tab_group="2"
    64.1 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml	Thu Jan 30 13:17:17 2014 -0500
    64.2 +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml	Tue Feb 11 13:41:31 2014 -0500
    64.3 @@ -212,11 +212,11 @@
    64.4               follows="top|left"
    64.5               height="20"
    64.6               layout="topleft"
    64.7 -             left="215"
    64.8 +             left="222"
    64.9               name="lod_mode_high"
   64.10               top_delta="0"
   64.11               visible="false"
   64.12 -             width="135">
   64.13 +             width="130">
   64.14                  <item
   64.15                   name="Triangle Limit"
   64.16                   value="Triangle Limit" />
   64.17 @@ -230,7 +230,7 @@
   64.18               height="20"
   64.19               increment="10"
   64.20               layout="topleft"
   64.21 -             left_pad="5"
   64.22 +             left_pad="3"
   64.23               name="lod_triangle_limit_high"
   64.24               visible="false"
   64.25               width="55" />
   64.26 @@ -342,10 +342,10 @@
   64.27               follows="top|left"
   64.28               height="20"
   64.29               layout="topleft"
   64.30 -             left="215"
   64.31 +             left="222"
   64.32               name="lod_mode_medium"
   64.33               top_delta="0"
   64.34 -             width="135">
   64.35 +             width="130">
   64.36                  <item
   64.37                   name="Triangle Limit"
   64.38                   value="Triangle Limit" />
   64.39 @@ -359,7 +359,7 @@
   64.40               height="20"
   64.41               increment="10"
   64.42               layout="topleft"
   64.43 -             left_pad="5"
   64.44 +             left_pad="3"
   64.45               name="lod_triangle_limit_medium"
   64.46               width="55" />
   64.47              <spinner
   64.48 @@ -470,10 +470,10 @@
   64.49               follows="top|left"
   64.50               height="20"
   64.51               layout="topleft"
   64.52 -             left="215"
   64.53 +             left="222"
   64.54               name="lod_mode_low"
   64.55               top_delta="0"
   64.56 -             width="135">
   64.57 +             width="130">
   64.58                  <item
   64.59                   name="Triangle Limit"
   64.60                   value="Triangle Limit" />
   64.61 @@ -487,7 +487,7 @@
   64.62               height="20"
   64.63               increment="10"
   64.64               layout="topleft"
   64.65 -             left_pad="5"
   64.66 +             left_pad="3"
   64.67               name="lod_triangle_limit_low"
   64.68               width="55" />
   64.69              <spinner
   64.70 @@ -598,10 +598,10 @@
   64.71               follows="top|left"
   64.72               height="20"
   64.73               layout="topleft"
   64.74 -             left="215"
   64.75 +             left="222"
   64.76               name="lod_mode_lowest"
   64.77               top_delta="0"
   64.78 -             width="135">
   64.79 +             width="130">
   64.80                  <item
   64.81                   name="Triangle Limit"
   64.82                   value="Triangle Limit" />
   64.83 @@ -615,7 +615,7 @@
   64.84               height="20"
   64.85               increment="10"
   64.86               layout="topleft"
   64.87 -             left_pad="5"
   64.88 +             left_pad="3"
   64.89               name="lod_triangle_limit_lowest"
   64.90               width="55" />
   64.91              <spinner
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/indra/newview/skins/default/xui/en/floater_region_restarting.xml	Tue Feb 11 13:41:31 2014 -0500
    65.3 @@ -0,0 +1,75 @@
    65.4 +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
    65.5 +<floater
    65.6 + height="150"
    65.7 + width="290"
    65.8 + layout="topleft"
    65.9 + name="region_restarting"
   65.10 + help_topic="floater_region_restarting"
   65.11 + single_instance="true"
   65.12 + reuse_instance="false"
   65.13 + title="REGION RESTARTING">
   65.14 +    <string name="RegionName">
   65.15 +    The region you are in now ([NAME]) is about to restart.
   65.16 +
   65.17 +If you stay in this region you will be logged out.
   65.18 +    </string>
   65.19 +    <string name="RestartSeconds">
   65.20 +     Seconds until restart
   65.21 +[SECONDS]
   65.22 +    </string>
   65.23 +    <panel
   65.24 +     name="layout_panel_1"
   65.25 +     height="150"
   65.26 +     width="290"
   65.27 +     follows="right|top"
   65.28 +     top="0"
   65.29 +     left="0"
   65.30 +     background_visible="true"
   65.31 +     bg_opaque_color="Orange"
   65.32 +     bg_alpha_color="Orange">
   65.33 +
   65.34 +    <icon color="1.0 1.0 1.0 1.0"
   65.35 +     tab_stop="false"
   65.36 +     mouse_opaque="false"
   65.37 +     name="icon"
   65.38 +     width="32"
   65.39 +     height="32"
   65.40 +     image_name="notify_caution_icon.tga"
   65.41 +     follows="left|top">
   65.42 +    </icon>
   65.43 +
   65.44 +    <text
   65.45 +     type="string"
   65.46 +     length="1"
   65.47 +     follows="top|left"
   65.48 +     layout="topleft"
   65.49 +     name="region_name"
   65.50 +     text_color="Black"
   65.51 +     font="SansSerifBold"
   65.52 +     word_wrap="true"
   65.53 +     height="100"
   65.54 +     top="5"
   65.55 +     left="40"
   65.56 +     width="230">
   65.57 +    The region you are in now (-The longest region name-) is about to restart.
   65.58 +
   65.59 +If you stay in this region you will be logged out.
   65.60 +    </text>
   65.61 +    <text
   65.62 +     type="string"
   65.63 +     length="1"
   65.64 +     follows="top|left"
   65.65 +     layout="topleft"
   65.66 +     name="restart_seconds"
   65.67 +     text_color="Black"
   65.68 +     font="SansSerifLargeBold"
   65.69 +     height="40"
   65.70 +     top="110"
   65.71 +     left="0"
   65.72 +     halign="center"
   65.73 +     width="290">
   65.74 +     Seconds until restart
   65.75 +     32767
   65.76 +    </text>
   65.77 +  </panel>
   65.78 + </floater>
    66.1 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml	Thu Jan 30 13:17:17 2014 -0500
    66.2 +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml	Tue Feb 11 13:41:31 2014 -0500
    66.3 @@ -552,6 +552,14 @@
    66.4           function="Inventory.DoToSelected"
    66.5           parameter="about" />
    66.6      </menu_item_call>
    66.7 +   <menu_item_call
    66.8 +     label="Show on Map"
    66.9 +     layout="topleft"
   66.10 +     name="show_on_map">
   66.11 +        <menu_item_call.on_click
   66.12 +         function="Inventory.DoToSelected"
   66.13 +         parameter="show_on_map" />
   66.14 +    </menu_item_call>
   66.15      <menu_item_separator
   66.16       layout="topleft" 
   66.17       name="Animation Separator" />
    67.1 --- a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml	Thu Jan 30 13:17:17 2014 -0500
    67.2 +++ b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml	Tue Feb 11 13:41:31 2014 -0500
    67.3 @@ -17,7 +17,7 @@
    67.4           function="TeleportHistory.MoreInformation" />
    67.5      </menu_item_call>
    67.6      <menu_item_call
    67.7 -     label="Copy to Clipboard"
    67.8 +     label="Copy SLurl"
    67.9       layout="topleft"
   67.10       name="CopyToClipboard">
   67.11          <menu_item_call.on_click
    68.1 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml	Thu Jan 30 13:17:17 2014 -0500
    68.2 +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml	Tue Feb 11 13:41:31 2014 -0500
    68.3 @@ -2564,6 +2564,16 @@
    68.4             parameter="collision skeleton" />
    68.5          </menu_item_check>
    68.6          <menu_item_check
    68.7 +         label="Joints"
    68.8 +         name="Joints">
    68.9 +          <menu_item_check.on_check
   68.10 +           function="Advanced.CheckInfoDisplay"
   68.11 +           parameter="joints" />
   68.12 +          <menu_item_check.on_click
   68.13 +           function="Advanced.ToggleInfoDisplay"
   68.14 +           parameter="joints" />
   68.15 +        </menu_item_check>
   68.16 +        <menu_item_check
   68.17           label="Raycast"
   68.18           name="Raycast">
   68.19            <menu_item_check.on_check
    69.1 --- a/indra/newview/skins/default/xui/en/notifications.xml	Thu Jan 30 13:17:17 2014 -0500
    69.2 +++ b/indra/newview/skins/default/xui/en/notifications.xml	Tue Feb 11 13:41:31 2014 -0500
    69.3 @@ -6893,8 +6893,8 @@
    69.4    <notification
    69.5     icon="notify.tga"
    69.6     name="RegionRestartMinutes"
    69.7 +   show_toast="false"
    69.8     priority="high"
    69.9 -   sound="UISndAlert"
   69.10     type="notify">
   69.11  The region "[NAME]" will restart in [MINUTES] minutes.
   69.12  If you stay in this region you will be logged out.
   69.13 @@ -6903,8 +6903,8 @@
   69.14    <notification
   69.15     icon="notify.tga"
   69.16     name="RegionRestartSeconds"
   69.17 +   show_toast="false"
   69.18     priority="high"
   69.19 -   sound="UISndAlert"
   69.20     type="notify">
   69.21  The region "[NAME]" will restart in [SECONDS] seconds.
   69.22  If you stay in this region you will be logged out.
    70.1 --- a/indra/newview/skins/default/xui/en/panel_people.xml	Thu Jan 30 13:17:17 2014 -0500
    70.2 +++ b/indra/newview/skins/default/xui/en/panel_people.xml	Tue Feb 11 13:41:31 2014 -0500
    70.3 @@ -66,8 +66,7 @@
    70.4       tab_position="top"
    70.5       top="0"
    70.6       halign="center"
    70.7 -     right="-5"
    70.8 -     use_highlighting_on_hover="true">
    70.9 +     right="-5">
   70.10  
   70.11  <!-- ================================= NEARBY tab =========================== -->
   70.12  
   70.13 @@ -507,6 +506,7 @@
   70.14                  right="-10"
   70.15                  top_pad="4"
   70.16                  left="3"
   70.17 +                use_ellipses="true"
   70.18                  name="groupcount">
   70.19                You belong to [COUNT] groups, and can join [REMAINING] more.
   70.20              </text>
    71.1 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml	Thu Jan 30 13:17:17 2014 -0500
    71.2 +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml	Tue Feb 11 13:41:31 2014 -0500
    71.3 @@ -150,7 +150,6 @@
    71.4    <combo_button
    71.5  		name="Location History"
    71.6                  label=""
    71.7 -                image_hover_unselected="ComboButton_Hovered"
    71.8                  pad_right="0"/>
    71.9    <combo_list
   71.10  	      bg_writeable_color="MenuDefaultBgColor"
    72.1 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml	Thu Jan 30 13:17:17 2014 -0500
    72.2 +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml	Tue Feb 11 13:41:31 2014 -0500
    72.3 @@ -24,26 +24,17 @@
    72.4                 tab_bottom_image_unselected="Toolbar_Left_Off"
    72.5                 tab_bottom_image_selected="Toolbar_Left_Selected"
    72.6                 tab_left_image_unselected="SegmentedBtn_Left_Disabled"
    72.7 -               tab_left_image_selected="SegmentedBtn_Left_Selected_Over"
    72.8 -               tab_top_image_hovered="TabTop_Left_Selected"
    72.9 -               tab_button_image_hovered="Toolbar_Left_Selected"
   72.10 -               tab_left_image_hovered="SegmentedBtn_Left_Selected_Over"/>
   72.11 +               tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/>
   72.12    <middle_tab tab_top_image_unselected="TabTop_Middle_Off"
   72.13                 tab_top_image_selected="TabTop_Middle_Selected"
   72.14                 tab_bottom_image_unselected="Toolbar_Middle_Off"
   72.15                 tab_bottom_image_selected="Toolbar_Middle_Selected"
   72.16                 tab_left_image_unselected="SegmentedBtn_Left_Disabled"
   72.17 -               tab_left_image_selected="SegmentedBtn_Left_Selected_Over"
   72.18 -               tab_top_image_hovered="TabTop_Middle_Selected"
   72.19 -               tab_button_image_hovered="Toolbar_Middle_Selected"
   72.20 -               tab_left_image_hovered="SegmentedBtn_Left_Selected_Over"/>
   72.21 +               tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/>
   72.22    <last_tab tab_top_image_unselected="TabTop_Right_Off"
   72.23                 tab_top_image_selected="TabTop_Right_Selected"
   72.24                 tab_bottom_image_unselected="Toolbar_Right_Off"
   72.25                 tab_bottom_image_selected="Toolbar_Right_Selected"
   72.26                 tab_left_image_unselected="SegmentedBtn_Left_Disabled"
   72.27 -               tab_left_image_selected="SegmentedBtn_Left_Selected_Over"
   72.28 -               tab_top_image_hovered="TabTop_Right_Selected"
   72.29 -               tab_button_image_hovered="Toolbar_Right_Selected"
   72.30 -               tab_left_image_hovered="SegmentedBtn_Left_Selected_Over"/>
   72.31 +               tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/>
   72.32  </tab_container>
    73.1 --- a/indra/newview/viewer_manifest.py	Thu Jan 30 13:17:17 2014 -0500
    73.2 +++ b/indra/newview/viewer_manifest.py	Tue Feb 11 13:41:31 2014 -0500
    73.3 @@ -38,7 +38,7 @@
    73.4  # Put it FIRST because some of our build hosts have an ancient install of
    73.5  # indra.util.llmanifest under their system Python!
    73.6  sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python"))
    73.7 -from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL
    73.8 +from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError
    73.9  try:
   73.10      from llbase import llsd
   73.11  except ImportError:
   73.12 @@ -818,11 +818,27 @@
   73.13                  keychain_pwd = open(keychain_pwd_path).read().rstrip()
   73.14  
   73.15                  self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' % ( keychain_pwd, home_path ) )
   73.16 -                self.run_command('codesign --verbose --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % {
   73.17 -                                 'home_path' : home_path,
   73.18 -                                 'identity': identity,
   73.19 -                                 'bundle': self.get_dst_prefix()
   73.20 -                })
   73.21 +                signed=False
   73.22 +                sign_attempts=3
   73.23 +                sign_retry_wait=15
   73.24 +                while (not signed) and (sign_attempts > 0):
   73.25 +                    try:
   73.26 +                        sign_attempts-=1;
   73.27 +                        self.run_command(
   73.28 +                           'codesign --verbose --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % {
   73.29 +                               'home_path' : home_path,
   73.30 +                               'identity': identity,
   73.31 +                               'bundle': self.get_dst_prefix()
   73.32 +                               })
   73.33 +                        signed=True # if no exception was raised, the codesign worked
   73.34 +                    except ManifestError, err:
   73.35 +                        if sign_attempts:
   73.36 +                            print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait
   73.37 +                            time.sleep(sign_retry_wait)
   73.38 +                            sign_retry_wait*=2
   73.39 +                        else:
   73.40 +                            print >> sys.stderr, "Maximum codesign attempts exceeded; giving up"
   73.41 +                            raise
   73.42  
   73.43          imagename="SecondLife_" + '_'.join(self.args['version'])
   73.44  

mercurial