diff options
| author | Brian McGroarty <soft@lindenlab.com> | 2008-05-07 17:17:42 +0000 | 
|---|---|---|
| committer | Brian McGroarty <soft@lindenlab.com> | 2008-05-07 17:17:42 +0000 | 
| commit | e1e1212daae33723e7da325f295a5c3a6bb78979 (patch) | |
| tree | 95139904e71995519db2fc6e056940b2f40e73a3 /indra | |
| parent | 41927004751731d2d0cb74989ded36878292ee4e (diff) | |
QAR-520 maintenance-7 merge -- svn merge -r 84923:86093 svn+ssh://svn.lindenlab.com/svn/linden/qa/maintenance-7-sandbox-84884 -- dataserver-is-deprecated
Diffstat (limited to 'indra')
70 files changed, 711 insertions, 429 deletions
| diff --git a/indra/lib/python/indra/base/llsd.py b/indra/lib/python/indra/base/llsd.py index 9e636ea423..76855deb7f 100644 --- a/indra/lib/python/indra/base/llsd.py +++ b/indra/lib/python/indra/base/llsd.py @@ -215,8 +215,12 @@ class LLSDXMLFormatter(object):      def format(self, something):          return '<?xml version="1.0" ?>' + self.elt("llsd", self.generate(something)) +_g_xml_formatter = None  def format_xml(something): -    return LLSDXMLFormatter().format(something) +    global _g_xml_formatter +    if _g_xml_formatter is None: +        _g_xml_formatter = LLSDXMLFormatter() +    return _g_xml_formatter.format(something)  class LLSDNotationFormatter(object):      def __init__(self): diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 91d96904ba..ce59349d55 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -71,6 +71,15 @@ static F32 MAX_CONSTRAINTS = 10;  // JointMotionList  //-----------------------------------------------------------------------------  LLKeyframeMotion::JointMotionList::JointMotionList() +	: mDuration(0.f), +	  mLoop(FALSE), +	  mLoopInPoint(0.f), +	  mLoopOutPoint(0.f), +	  mEaseInDuration(0.f), +	  mEaseOutDuration(0.f), +	  mBasePriority(LLJoint::LOW_PRIORITY), +	  mHandPose(LLHandMotion::HAND_POSE_SPREAD), +	  mMaxPriority(LLJoint::LOW_PRIORITY)  {  } @@ -2116,11 +2125,19 @@ void LLKeyframeDataCache::clear()  //-----------------------------------------------------------------------------  LLKeyframeMotion::JointConstraint::JointConstraint(JointConstraintSharedData* shared_data) : mSharedData(shared_data)   { +	mWeight = 0.f;  	mTotalLength = 0.f;  	mActive = FALSE;  	mSourceVolume = NULL;  	mTargetVolume = NULL;  	mFixupDistanceRMS = 0.f; + +	int i; +	for (i=0; i<MAX_CHAIN_LENGTH; ++i) +	{ +		mJointLengths[i] = 0.f; +		mJointLengthFractions[i] = 0.f; +	}  }  //----------------------------------------------------------------------------- diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h index c383e5e99e..a50447c3bf 100644 --- a/indra/llcharacter/llkeyframemotion.h +++ b/indra/llcharacter/llkeyframemotion.h @@ -224,7 +224,11 @@ protected:  			mEaseOutStopTime(0.f),   			mUseTargetOffset(FALSE),  			mConstraintType(TYPE_POINT), -			mConstraintTargetType(TYPE_BODY) {}; +			mConstraintTargetType(TYPE_BODY), +			mSourceConstraintVolume(0), +			mTargetConstraintVolume(0), +			mJointStateIndices(NULL) +		{ };  		~JointConstraintSharedData() { delete [] mJointStateIndices; }  		S32						mSourceConstraintVolume; diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp index 0d7e34bb4f..471acd8ac3 100644 --- a/indra/llcharacter/llkeyframewalkmotion.cpp +++ b/indra/llcharacter/llkeyframewalkmotion.cpp @@ -139,9 +139,16 @@ BOOL LLKeyframeWalkMotion::onUpdate(F32 time, U8* joint_mask)  // LLWalkAdjustMotion()  // Class Constructor  //----------------------------------------------------------------------------- -LLWalkAdjustMotion::LLWalkAdjustMotion(const LLUUID &id) : LLMotion(id) +LLWalkAdjustMotion::LLWalkAdjustMotion(const LLUUID &id) : +	LLMotion(id), +	mLastTime(0.f), +	mAvgCorrection(0.f), +	mSpeedAdjust(0.f), +	mAnimSpeed(0.f), +	mAvgSpeed(0.f), +	mRelativeDir(0.f), +	mAnkleOffset(0.f)  { -	mLastTime = 0.f;  	mName = "walk_adjust";  	mPelvisState = new LLJointState; @@ -349,7 +356,8 @@ void LLWalkAdjustMotion::onDeactivate()  // LLFlyAdjustMotion::LLFlyAdjustMotion()  //-----------------------------------------------------------------------------  LLFlyAdjustMotion::LLFlyAdjustMotion(const LLUUID &id) -	: LLMotion(id) +	: LLMotion(id), +	  mRoll(0.f)  {  	mName = "fly_adjust"; diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp index fff19dbefe..5bcae5e635 100644 --- a/indra/llcharacter/llmotioncontroller.cpp +++ b/indra/llcharacter/llmotioncontroller.cpp @@ -155,18 +155,19 @@ LLMotion *LLMotionRegistry::createMotion( const LLUUID &id )  // LLMotionController()  // Class Constructor  //----------------------------------------------------------------------------- -LLMotionController::LLMotionController(  ) -{ -	mTime = 0.f; -	mTimeOffset = 0.f; -	mLastTime = 0.0f; -	mHasRunOnce = FALSE; -	mPaused = FALSE; -	mPauseTime = 0.f; -	mTimeStep = 0.f; -	mTimeStepCount = 0; -	mLastInterp = 0.f; -	mTimeFactor = 1.f; +LLMotionController::LLMotionController() +	: mTimeFactor(1.f), +	  mCharacter(NULL), +	  mTime(0.f), +	  mTimeOffset(0.f), +	  mLastTime(0.0f), +	  mHasRunOnce(FALSE), +	  mPaused(FALSE), +	  mPauseTime(0.f), +	  mTimeStep(0.f), +	  mTimeStepCount(0), +	  mLastInterp(0.f) +{  } diff --git a/indra/llcharacter/llmotioncontroller.h b/indra/llcharacter/llmotioncontroller.h index effea0940a..c6749c5c36 100644 --- a/indra/llcharacter/llmotioncontroller.h +++ b/indra/llcharacter/llmotioncontroller.h @@ -227,10 +227,10 @@ protected:  	F32					mLastTime;  	BOOL				mHasRunOnce;  	BOOL				mPaused; +	F32					mPauseTime;  	F32					mTimeStep;  	S32					mTimeStepCount;  	F32					mLastInterp; -	F32					mPauseTime;  	U8					mJointSignature[2][LL_CHARACTER_MAX_JOINTS];  }; diff --git a/indra/llcharacter/llpose.cpp b/indra/llcharacter/llpose.cpp index 2120cb223e..c57fbfdc5d 100644 --- a/indra/llcharacter/llpose.cpp +++ b/indra/llcharacter/llpose.cpp @@ -188,6 +188,7 @@ LLJointStateBlender::LLJointStateBlender()  	{  		mJointStates[i] = NULL;  		mPriorities[i] = S32_MIN; +		mAdditiveBlends[i] = FALSE;  	}  } @@ -458,6 +459,7 @@ void LLJointStateBlender::resetCachedJoint()  //-----------------------------------------------------------------------------  LLPoseBlender::LLPoseBlender() +	: mNextPoseSlot(0)  {  } diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index d034334aab..2c7c7e38a4 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -492,6 +492,7 @@ void LLApp::setDefaultChildCallback(LLAppChildCallback callback)  pid_t LLApp::fork()  { +	fflush(NULL); // flush all buffers before the child inherits them  	pid_t pid = ::fork();  	if( pid < 0 )  	{ diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 13bf368334..057b1bb417 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1006,18 +1006,15 @@ namespace LLError  					<< "(" << site.mLine << ") : ";  		} -		if (message.find(functionName(site.mFunction)) == std::string::npos) -		{  	#if LL_WINDOWS -			// DevStudio: __FUNCTION__ already includes the full class name +		// DevStudio: __FUNCTION__ already includes the full class name  	#else -			if (site.mClassInfo != typeid(NoClassInfo)) -			{ -				prefix << className(site.mClassInfo) << "::"; -			} -	#endif -			prefix << site.mFunction << ": "; +		if (site.mClassInfo != typeid(NoClassInfo)) +		{ +			prefix << className(site.mClassInfo) << "::";  		} +	#endif +		prefix << site.mFunction << ": ";  		prefix << message;  		message = prefix.str(); diff --git a/indra/llcommon/lllslconstants.h b/indra/llcommon/lllslconstants.h index e4c83582ce..12467e4e63 100644 --- a/indra/llcommon/lllslconstants.h +++ b/indra/llcommon/lllslconstants.h @@ -181,4 +181,7 @@ const S32 OBJECT_OWNER = 6;  const S32 OBJECT_GROUP = 7;  const S32 OBJECT_CREATOR = 8; +// llTextBox() magic token string - yes this is a hack.  sue me. +const std::string TEXTBOX_MAGIC_TOKEN = "!!llTextBox!!"; +  #endif diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 88d7e88edc..8a1e1fe8cb 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -39,15 +39,8 @@  const char LL_UNKNOWN_CHAR = '?'; -class LLVector3; -class LLVector3d; -class LLQuaternion; -class LLUUID; -class LLColor4; -class LLColor4U; - -#if (LL_DARWIN || LL_SOLARIS || (LL_LINUX && __GNUC__ > 2)) -// Template specialization of char_traits for U16s. Only necessary on Mac for now (exists on Windows, unused/broken on Linux/gcc2.95) +#if LL_DARWIN || LL_LINUX || LL_SOLARIS +// Template specialization of char_traits for U16s. Only necessary on Mac and Linux (exists on Windows already)  namespace std  {  template<> @@ -166,13 +159,13 @@ public:  // but it might be worthwhile to just go with two implementations (LLString and LLWString) of  // an interface class, unless we can think of a good reason to have a std::basic_string polymorphic base -//**************************************************************** +// ****************************************************************  // NOTA BENE: do *NOT* dynamically allocate memory inside of LLStringBase as the {*()^#%*)#%W^*)#%*)STL implentation  // of basic_string doesn't provide a virtual destructor.  If we need to allocate resources specific to LLString  // then we should either customize std::basic_string to linden::basic_string or change LLString to be a wrapper  // that contains an instance of std::basic_string.  Similarly, overriding methods defined in std::basic_string will *not*  // be called in a polymorphic manner (passing an instance of basic_string to a particular function) -//**************************************************************** +// ****************************************************************  template <class T>  class LLStringBase : public std::basic_string<T>  @@ -196,35 +189,6 @@ public:  	LLStringBase(const T* s);  	LLStringBase(const T* s, size_type n);  	LLStringBase(const T* s, size_type pos, size_type n ); -	 -#if LL_LINUX || LL_SOLARIS -	void clear() { assign(null); } -	 -	LLStringBase<T>& assign(const T* s); -	LLStringBase<T>& assign(const T* s, size_type n);  -	LLStringBase<T>& assign(const LLStringBase& s); -	LLStringBase<T>& assign(size_type n, const T& c); -	LLStringBase<T>& assign(const T* a, const T* b); -	LLStringBase<T>& assign(typename LLStringBase<T>::iterator &it1, typename LLStringBase<T>::iterator &it2); -	LLStringBase<T>& assign(typename LLStringBase<T>::const_iterator &it1, typename LLStringBase<T>::const_iterator &it2); - -    // workaround for bug in gcc2 STL headers. -    #if ((__GNUC__ <= 2) && (!defined _STLPORT_VERSION)) -    const T* c_str () const -    { -        if (length () == 0) -        { -            static const T zero = 0; -            return &zero; -        } - -        //terminate (); -        { string_char_traits<T>::assign(const_cast<T*>(data())[length()], string_char_traits<T>::eos()); } - -        return data (); -    } -    #endif -#endif  	bool operator==(const T* _Right) const { return _Right ? (std::basic_string<T>::compare(_Right) == 0) : this->empty(); } @@ -787,78 +751,6 @@ LLStringBase<T>::LLStringBase(const T* s, size_type pos, size_type n ) : std::ba  	}  } -#if LL_LINUX || LL_SOLARIS -template<class T>  -LLStringBase<T>& LLStringBase<T>::assign(const T* s) -{ -	if (s) -	{ -		std::basic_string<T>::assign(s); -	} -	else -	{ -		assign(LLStringBase<T>::null); -	} -	return *this; -} - -template<class T>  -LLStringBase<T>& LLStringBase<T>::assign(const T* s, size_type n) -{ -	if (s) -	{ -		std::basic_string<T>::assign(s, n); -	} -	else -	{ -		assign(LLStringBase<T>::null); -	} -	return *this; -} - -template<class T>  -LLStringBase<T>& LLStringBase<T>::assign(const LLStringBase<T>& s) -{ -	std::basic_string<T>::assign(s); -	return *this; -} - -template<class T>  -LLStringBase<T>& LLStringBase<T>::assign(size_type n, const T& c) -{ -    std::basic_string<T>::assign(n, c); -    return *this; -} - -template<class T>  -LLStringBase<T>& LLStringBase<T>::assign(const T* a, const T* b) -{ -    if (a > b) -        assign(LLStringBase<T>::null); -    else -        assign(a, (size_type) (b-a)); -    return *this; -} - -template<class T> -LLStringBase<T>& LLStringBase<T>::assign(typename LLStringBase<T>::iterator &it1, typename LLStringBase<T>::iterator &it2) -{ -    assign(LLStringBase<T>::null); -    while(it1 != it2) -        *this += *it1++; -    return *this; -} - -template<class T> -LLStringBase<T>& LLStringBase<T>::assign(typename LLStringBase<T>::const_iterator &it1, typename LLStringBase<T>::const_iterator &it2) -{ -    assign(LLStringBase<T>::null); -    while(it1 != it2) -        *this += *it1++; -    return *this; -} -#endif -  //static  template<class T>   void LLStringBase<T>::toUpper(std::basic_string<T>& string)	 diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp index f9b36bd1f6..1ec92460bd 100644 --- a/indra/llimage/llimagejpeg.cpp +++ b/indra/llimage/llimagejpeg.cpp @@ -40,7 +40,8 @@ LLImageJPEG::LLImageJPEG()  	LLImageFormatted(IMG_CODEC_JPEG),  	mOutputBuffer( NULL ),  	mOutputBufferSize( 0 ), -	mEncodeQuality( 75 ) 		// on a scale from 1 to 100 +	mEncodeQuality( 75 ), // on a scale from 1 to 100 +	mSetjmpBuffer()  {  } diff --git a/indra/llimage/llimagetga.cpp b/indra/llimage/llimagetga.cpp index 805297f8ee..682434850a 100644 --- a/indra/llimage/llimagetga.cpp +++ b/indra/llimage/llimagetga.cpp @@ -63,7 +63,30 @@ LLImageTGA::LLImageTGA()  	  mColorMapStart( 0 ),  	  mColorMapLength( 0 ),  	  mColorMapBytesPerEntry( 0 ), -	  mIs15Bit( FALSE ) +	  mIs15Bit( FALSE ), + +	  mAttributeBits(0), +	  mColorMapDepth(0), +	  mColorMapIndexHi(0), +	  mColorMapIndexLo(0), +	  mColorMapLengthHi(0), +	  mColorMapLengthLo(0), +	  mColorMapType(0), +	  mDataOffset(0), +	  mHeightHi(0), +	  mHeightLo(0), +	  mIDLength(0), +	  mImageType(0), +	  mInterleave(0), +	  mOriginRightBit(0), +	  mOriginTopBit(0), +	  mPixelSize(0), +	  mWidthHi(0), +	  mWidthLo(0), +	  mXOffsetHi(0), +	  mXOffsetLo(0), +	  mYOffsetHi(0), +	  mYOffsetLo(0)  {  } diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp index 74a09b2106..7b0c1ea931 100644 --- a/indra/llimage/llpngwrapper.cpp +++ b/indra/llimage/llpngwrapper.cpp @@ -42,17 +42,22 @@  LLPngWrapper::LLPngWrapper()  	: mReadPngPtr( NULL ), -      mReadInfoPtr( NULL ), +	  mReadInfoPtr( NULL ),  	  mWritePngPtr( NULL ),  	  mWriteInfoPtr( NULL ),  	  mRowPointers( NULL ), +	  mWidth( 0 ), +	  mHeight( 0 ),  	  mBitDepth( 0 ),  	  mColorType( 0 ),  	  mChannels( 0 ),  	  mInterlaceType( 0 ),  	  mCompressionType( 0 ),  	  mFilterMethod( 0 ), -	  mFinalSize( 0 ) +	  mFinalSize( 0 ), +	  mHasBKGD(false), +	  mBackgroundColor(), +	  mGamma(0.f)  {  } diff --git a/indra/llimage/llpngwrapper.h b/indra/llimage/llpngwrapper.h index 1c66b8a31c..fd21ae697f 100644 --- a/indra/llimage/llpngwrapper.h +++ b/indra/llimage/llpngwrapper.h @@ -93,7 +93,7 @@ private:  	U32 mFinalSize; -	BOOL mHasBKGD; +	bool mHasBKGD;  	png_color_16p mBackgroundColor;  	F64 mGamma; diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 15beeec866..0b11b6009e 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -1,33 +1,33 @@  /**  -* @file llparcel.cpp -* @brief A land parcel. -* -* $LicenseInfo:firstyear=2002&license=viewergpl$ -*  -* Copyright (c) 2002-2007, Linden Research, Inc. -*  -* Second Life Viewer Source Code -* The source code in this file ("Source Code") is provided by Linden Lab -* to you under the terms of the GNU General Public License, version 2.0 -* ("GPL"), unless you have obtained a separate licensing agreement -* ("Other License"), formally executed by you and Linden Lab.	 Terms of -* the GPL can be found in doc/GPL-license.txt in this distribution, or -* online at http://secondlife.com/developers/opensource/gplv2 -*  -* There are special exceptions to the terms and conditions of the GPL as -* it is applied to this Source Code. View the full text of the exception -* in the file doc/FLOSS-exception.txt in this software distribution, or -* online at http://secondlife.com/developers/opensource/flossexception -*  -* By copying, modifying or distributing this software, you acknowledge -* that you have read and understood your obligations described above, -* and agree to abide by those obligations. -*  -* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO -* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, -* COMPLETENESS OR PERFORMANCE. -* $/LicenseInfo$ -*/ + * @file llparcel.cpp + * @brief A land parcel. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + *  + * Copyright (c) 2002-2007, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.	 Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */  #include "linden_common.h" @@ -241,6 +241,9 @@ void LLParcel::init(const LLUUID &owner_id,  	setSelectedPrimCount(0);  	setTempPrimCount(0);  	setCleanOtherTime(0); +    setRegionPushOverride(FALSE); +    setRegionDenyAnonymousOverride(FALSE); +    setRegionDenyAgeUnverifiedOverride(FALSE);  	setParcelPrimBonus(parcel_object_bonus);  	setPreviousOwnerID(LLUUID::null); diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp index f816d54181..99a6313289 100644 --- a/indra/llinventory/llpermissions.cpp +++ b/indra/llinventory/llpermissions.cpp @@ -826,7 +826,7 @@ LLXMLNode *LLPermissions::exportFileXML() const  {  	LLXMLNode *ret = new LLXMLNode("permissions", FALSE); -	ret->createChild("group_owned", TRUE)->setBoolValue(1, (const BOOL*)&mIsGroupOwned); +	ret->createChild("group_owned", TRUE)->setBoolValue(mIsGroupOwned);  	ret->createChild("base_mask", FALSE)->setByteValue(4, (U8*)&mMaskBase, LLXMLNode::ENCODING_HEX);  	ret->createChild("owner_mask", FALSE)->setByteValue(4, (U8*)&mMaskOwner, LLXMLNode::ENCODING_HEX); @@ -869,7 +869,11 @@ bool LLPermissions::importXML(LLXMLNode* node)  		if (node->getChild("group_id", sub_node))  			success = success && (1 == sub_node->getUUIDValue(1, &mGroup));  		if (node->getChild("group_owned", sub_node)) -			success = success && (1 == sub_node->getBoolValue(1, (BOOL*)&mIsGroupOwned)); +		{ +			BOOL tmpbool = FALSE; +			success = success && (1 == sub_node->getBoolValue(1, &tmpbool)); +			mIsGroupOwned = (bool)tmpbool; +		}  		if (!success)  		{  			lldebugs << "LLPermissions::importXML() failed for node named '"  diff --git a/indra/llinventory/lltransactionflags.cpp b/indra/llinventory/lltransactionflags.cpp index d4c97d11bf..9b49a6b589 100644 --- a/indra/llinventory/lltransactionflags.cpp +++ b/indra/llinventory/lltransactionflags.cpp @@ -95,12 +95,16 @@ std::string build_transfer_message_to_source(  	const LLUUID& dest_id,  	const std::string& dest_name,  	S32 transaction_type, -	const char* description) +	const char* desc)  { +	std::string description(ll_safe_string(desc));  	lldebugs << "build_transfer_message_to_source: " << amount << " "  		<< source_id << " " << dest_id << " " << dest_name << " " -		<< (description?description:"(no desc)") << llendl; -	if((0 == amount) || source_id.isNull()) return ll_safe_string(description); +		<< transaction_type << " " +		<< (description.empty()?"(no desc)":description.c_str()) +		<< llendl; +	if(source_id.isNull()) return description; +	if((0 == amount) && description.empty()) return description;  	std::ostringstream ostr;  	if(dest_id.isNull())  	{ @@ -123,7 +127,7 @@ std::string build_transfer_message_to_source(  	else  	{  		ostr << "You paid " << dest_name << " L$" << amount; -		append_reason(ostr, transaction_type, description); +		append_reason(ostr, transaction_type, description.c_str());  	}  	ostr << ".";  	return ostr.str(); @@ -139,7 +143,8 @@ std::string build_transfer_message_to_destination(  {  	lldebugs << "build_transfer_message_to_dest: " << amount << " "  		<< dest_id << " " << source_id << " " << source_name << " " -		<< (description?description:"(no desc)") << llendl; +		<< transaction_type << " " << (description?description:"(no desc)") +		<< llendl;  	if(0 == amount) return std::string();  	if(dest_id.isNull()) return ll_safe_string(description);  	std::ostringstream ostr; diff --git a/indra/llinventory/lltransactionflags.h b/indra/llinventory/lltransactionflags.h index f5ee9d68ed..3bf08af282 100644 --- a/indra/llinventory/lltransactionflags.h +++ b/indra/llinventory/lltransactionflags.h @@ -31,6 +31,8 @@  #ifndef LL_LLTRANSACTIONFLAGS_H  #define LL_LLTRANSACTIONFLAGS_H +class LLUUID; +  typedef U8 TransactionFlags;  // defined in common/llinventory/lltransactionflags.cpp diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index bd894753f8..82c712e5e7 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -115,11 +115,12 @@ protected:  	LLPlane mWorldPlanes[PLANE_NUM];  	LLPlane mHorizPlanes[HORIZ_PLANE_NUM]; -	typedef struct  +	struct frustum_plane  	{ +        frustum_plane() : mask(0) {}  		LLPlane p;  		U8 mask; -	} frustum_plane; +	};  	frustum_plane mAgentPlanes[7];  //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP  	U32 mPlaneCount;  //defaults to 6, if setUserClipPlane is called, uses user supplied clip plane in diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index f4052f336f..6b8e7ad4c6 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4182,13 +4182,13 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep)  LLVolumeFace::LLVolumeFace() +	: mID(0), +	  mTypeMask(0), +	  mBeginS(0), +	  mBeginT(0), +	  mNumS(0), +	  mNumT(0)  { -	mTypeMask = 0; -	mID = 0; -	mBeginS = 0; -	mBeginT = 0; -	mNumS = 0; -	mNumT = 0;  	mHasBinormals = FALSE;  } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 11a7c2f1c6..6154695e36 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -188,15 +188,20 @@ class LLProfileParams  {  public:  	LLProfileParams() +		: mCurveType(LL_PCODE_PROFILE_SQUARE), +		  mBegin(0.f), +		  mEnd(1.f), +		  mHollow(0.f), +		  mCRC(0)  	{ -		mCurveType = LL_PCODE_PROFILE_SQUARE; -		mBegin     = 0.f; -		mEnd       = 1.f; -		mHollow    = 0.f;  	}  	LLProfileParams(U8 curve, F32 begin, F32 end, F32 hollow) -		: mCurveType(curve), mBegin(begin), mEnd(end), mHollow(hollow) +		: mCurveType(curve), +		  mBegin(begin), +		  mEnd(end), +		  mHollow(hollow), +		  mCRC(0)  	{  	} @@ -221,6 +226,7 @@ public:  			temp_f32 = 1.f;  		}  		mHollow = temp_f32; +		mCRC = 0;  	}  	bool operator==(const LLProfileParams ¶ms) const; @@ -308,27 +314,36 @@ class LLPathParams  {  public:  	LLPathParams() +		: +		mCurveType(LL_PCODE_PATH_LINE), +		mBegin(0.f), +		mEnd(1.f), +		mScale(1.f,1.f), +		mShear(0.f,0.f), +		mTwistBegin(0.f), +		mTwistEnd(0.f), +		mRadiusOffset(0.f), +		mTaper(0.f,0.f), +		mRevolutions(1.f), +		mSkew(0.f), +		mCRC(0)  	{ -		mBegin     = 0.f; -		mEnd       = 1.f; -		mScale.setVec(1.f,1.f); -		mShear.setVec(0.f,0.f); -		mCurveType = LL_PCODE_PATH_LINE; -		mTwistBegin		= 0.f; -		mTwistEnd     	= 0.f; -		mRadiusOffset	= 0.f; -		mTaper.setVec(0.f,0.f); -		mRevolutions	= 1.f; -		mSkew			= 0.f;  	}  	LLPathParams(U8 curve, F32 begin, F32 end, F32 scx, F32 scy, F32 shx, F32 shy, F32 twistend, F32 twistbegin, F32 radiusoffset, F32 tx, F32 ty, F32 revolutions, F32 skew) -		: mCurveType(curve), mBegin(begin), mEnd(end), mTwistBegin(twistbegin), mTwistEnd(twistend),  -		  mRadiusOffset(radiusoffset), mRevolutions(revolutions), mSkew(skew) +		: mCurveType(curve), +		  mBegin(begin), +		  mEnd(end), +		  mScale(scx,scy), +		  mShear(shx,shy), +		  mTwistBegin(twistbegin), +		  mTwistEnd(twistend),  +		  mRadiusOffset(radiusoffset), +		  mTaper(tx,ty), +		  mRevolutions(revolutions), +		  mSkew(skew), +		  mCRC(0)  	{ -		mScale.setVec(scx,scy); -		mShear.setVec(shx,shy); -		mTaper.setVec(tx,ty);  	}  	LLPathParams(U8 curve, U16 begin, U16 end, U8 scx, U8 scy, U8 shx, U8 shy, U8 twistend, U8 twistbegin, U8 radiusoffset, U8 tx, U8 ty, U8 revolutions, U8 skew) @@ -346,6 +361,8 @@ public:  		mTaper.setVec(U8_TO_F32(tx) * TAPER_QUANTA,U8_TO_F32(ty) * TAPER_QUANTA);  		mRevolutions = ((F32)revolutions) * REV_QUANTA + 1.0f;  		mSkew = U8_TO_F32(skew) * SCALE_QUANTA; + +		mCRC = 0;  	}  	bool operator==(const LLPathParams ¶ms) const; @@ -524,6 +541,7 @@ class LLVolumeParams  {  public:  	LLVolumeParams() +		: mSculptType(LL_SCULPT_TYPE_NONE)  	{  	} @@ -648,7 +666,9 @@ public:  		  mConcave(FALSE),  		  mDirty(TRUE),  		  mTotalOut(0), -		  mTotal(2) +		  mTotal(2), +		  mMinX(0.f), +		  mMaxX(0.f)  	{  	} @@ -677,8 +697,6 @@ public:  	std::vector<Face>      mFaces;  	std::vector<LLVector3> mEdgeNormals;  	std::vector<LLVector3> mEdgeCenters; -	F32			  mMaxX; -	F32			  mMinX;  	friend std::ostream& operator<<(std::ostream &s, const LLProfile &profile); @@ -697,6 +715,9 @@ protected:  	S32			  mTotalOut;  	S32			  mTotal; + +	F32			  mMaxX; +	F32			  mMinX;  };  //------------------------------------------------------------------- diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp index e69c3e34ff..ad4e21efa9 100755 --- a/indra/llmessage/llsdmessagereader.cpp +++ b/indra/llmessage/llsdmessagereader.cpp @@ -37,7 +37,8 @@  #include "llsdmessagebuilder.h"  #include "llsdutil.h" -LLSDMessageReader::LLSDMessageReader() +LLSDMessageReader::LLSDMessageReader() : +	mMessageName(NULL)  {  } diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 47683d0ab4..04a6a181eb 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -212,7 +212,8 @@ public:  		mMaxContentWidth(0),  		mIndex(-1),   		mParentCtrl(NULL),  -		mHeader(NULL)  +		mHeader(NULL), +		mFontAlignment(LLFontGL::LEFT)  	{ }  	LLScrollListColumn(const LLSD &sd) @@ -260,6 +261,7 @@ public:  		mIndex = -1;  		mParentCtrl = NULL;  		mHeader = NULL; +		mFontAlignment = LLFontGL::LEFT;  	}  	// Public data is fine so long as this remains a simple struct-like data class. diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 5617eb4873..f0f3ac3bdc 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -4003,7 +4003,11 @@ BOOL LLTextEditor::exportBuffer(LLString &buffer )  //////////////////////////////////////////////////////////////////////////  // LLTextSegment -LLTextSegment::LLTextSegment(S32 start) : mStart(start) +LLTextSegment::LLTextSegment(S32 start) : +	mStart(start), +	mEnd(0), +	mToken(NULL), +	mIsDefault(FALSE)  {  }   LLTextSegment::LLTextSegment( const LLStyleSP& style, S32 start, S32 end ) : diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp index 83abcce3c1..9ed3c9b12d 100644 --- a/indra/llwindow/llkeyboard.cpp +++ b/indra/llwindow/llkeyboard.cpp @@ -67,6 +67,7 @@ LLKeyboard::LLKeyboard() : mCallbacks(NULL), mNumpadDistinct(ND_NUMLOCK_OFF)  	mInsertMode = LL_KIM_INSERT;  	mCurTranslatedKey = KEY_NONE; +	mCurScanKey = KEY_NONE;  	addKeyName(' ', "Space" );  	addKeyName(KEY_RETURN, "Enter" ); diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 3e39ecfa2e..8ca0b4b4b8 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -2762,7 +2762,7 @@ void spawn_web_browser(const char* escaped_url)  	cmd += "launch_url.sh";  	char* const argv[] = {(char*)cmd.c_str(), (char*)escaped_url, NULL}; -	fflush(NULL); +	fflush(NULL); // flush all buffers before the child inherits them  	pid_t pid = fork();  	if (pid == 0)  	{ // child diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp index 9b0675945d..73480fc068 100644 --- a/indra/llxml/llxmlnode.cpp +++ b/indra/llxml/llxmlnode.cpp @@ -55,6 +55,7 @@ BOOL LLXMLNode::sStripWhitespaceValues = FALSE;  LLXMLNode::LLXMLNode() :   	mID(""), +	mParser(NULL),  	mIsAttribute(FALSE),  	mVersionMajor(0),   	mVersionMinor(0),  @@ -72,6 +73,7 @@ LLXMLNode::LLXMLNode() :  LLXMLNode::LLXMLNode(const LLString& name, BOOL is_attribute) :   	mID(""), +	mParser(NULL),  	mIsAttribute(is_attribute),  	mVersionMajor(0),   	mVersionMinor(0),  @@ -89,6 +91,7 @@ LLXMLNode::LLXMLNode(const LLString& name, BOOL is_attribute) :  LLXMLNode::LLXMLNode(LLStringTableEntry* name, BOOL is_attribute) :   	mID(""), +	mParser(NULL),  	mIsAttribute(is_attribute),  	mVersionMajor(0),   	mVersionMinor(0),  diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h index d4b4a4655b..4d3c62d2e8 100644 --- a/indra/llxml/llxmlnode.h +++ b/indra/llxml/llxmlnode.h @@ -49,6 +49,13 @@  #include "llstringtable.h" +class LLVector3; +class LLVector3d; +class LLQuaternion; +class LLUUID; +class LLColor4; +class LLColor4U; +  struct CompareAttributes  { diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp index 47ea62b888..3a5b6eacc0 100644 --- a/indra/lscript/lscript_library/lscript_library.cpp +++ b/indra/lscript/lscript_library/lscript_library.cpp @@ -436,10 +436,12 @@ void LLScriptLibrary::init()  	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llStringTrim", "s", "si", "string llStringTrim(string src, integer trim_type)\nTrim leading and/or trailing spaces from a string.\nUses trim_type of STRING_TRIM, STRING_TRIM_HEAD or STRING_TRIM_TAIL."));  	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llRegionSay", NULL, "is", "llRegionSay(integer channel, string msg)\nbroadcasts msg to entire region on channel (not 0.)")); -  	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetObjectDetails", "l", "kl", "list llGetObjectDetails(key id, list params)\nGets the object details specified in params for the object with key id.\nDetails are OBJECT_NAME, _DESC, _POS, _ROT, _VELOCITY, _OWNER, _GROUP, _CREATOR.")); +	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetClickAction", NULL, "i", "llSetClickAction(integer action)\nSets the action performed when a prim is clicked upon.")); -		addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetClickAction", NULL, "i", "llSetClickAction(integer action)\nSets the action performed when a prim is clicked upon.")); +	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetRegionAgentCount", "i", NULL, "int llGetRegionAgentCount()\nreturns the number of agents in a region")); +	addFunction(new LLScriptLibraryFunction(10.f, 1.f, dummy_func, "llTextBox", NULL, "ksi", "llTextBox(key avatar, string message, integer chat_channel\nShows a dialog box on the avatar's screen with the message.\nA text box asks for input, and if entered the text is chatted on chat_channel.")); +	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetAgentLanguage", "s", "k", "string llGetAgentLanguage(key id)\nGets the agents preferred language.."));  	// energy, sleep, dummy_func, name, return type, parameters, help text, gods-only diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f1e4b39d7d..f53ec84fd1 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3808,6 +3808,17 @@          <key>Value</key>              <string>default</string>          </map> +    <key>LanguageIsPublic</key> +        <map> +        <key>Comment</key> +            <string>Let other residents see our language information</string> +        <key>Persist</key> +            <integer>1</integer> +        <key>Type</key> +            <string>Boolean</string> +        <key>Value</key> +            <integer>1</integer> +        </map>      <key>LastFeatureVersion</key>          <map>          <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 7ce985542f..a46db09e3e 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -4770,6 +4770,9 @@ void LLAgent::buildFullnameAndTitle(std::string& name) const  BOOL LLAgent::isInGroup(const LLUUID& group_id) const  { +	if (isGodlike()) +		return true; +  	S32 count = mGroups.count();  	for(S32 i = 0; i < count; ++i)  	{ @@ -4784,6 +4787,9 @@ BOOL LLAgent::isInGroup(const LLUUID& group_id) const  // This implementation should mirror LLAgentInfo::hasPowerInGroup  BOOL LLAgent::hasPowerInGroup(const LLUUID& group_id, U64 power) const  { +	if (isGodlike()) +		return true; +  	// GP_NO_POWERS can also mean no power is enough to grant an ability.  	if (GP_NO_POWERS == power) return FALSE; @@ -4805,6 +4811,9 @@ BOOL LLAgent::hasPowerInActiveGroup(U64 power) const  U64 LLAgent::getPowerInGroup(const LLUUID& group_id) const  { +	if (isGodlike()) +		return GP_ALL_POWERS; +	  	S32 count = mGroups.count();  	for(S32 i = 0; i < count; ++i)  	{ diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp new file mode 100644 index 0000000000..7401f95f29 --- /dev/null +++ b/indra/newview/llagentlanguage.cpp @@ -0,0 +1,65 @@ +/** + * @file llagentlanguage.cpp + * @brief Transmit language information to server + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llagentlanguage.h" +#include "llagent.h" +#include "llviewercontrol.h" +#include "llviewerregion.h" + +LLAgentLanguage::LLAgentLanguage() +{ +	gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&update)); +	gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&update)); +	gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&update)); +} + + +// send language settings to the sim +// static +bool LLAgentLanguage::update() +{ +	LLSD body; +	std::string url = gAgent.getRegion()->getCapability("UpdateAgentLanguage"); +	if (!url.empty()) +	{ +		std::string language = gSavedSettings.getString("Language"); +		if (language == "default") +			language = gSavedSettings.getString("SystemLanguage"); +		 +		body["language"] = language; +		body["language_is_public"] = gSavedSettings.getBOOL("LanguageIsPublic"); +		 +		LLHTTPClient::post(url, body, new LLHTTPClient::Responder); +	} +    return true; +} + diff --git a/indra/newview/llagentlanguage.h b/indra/newview/llagentlanguage.h new file mode 100644 index 0000000000..8d708b27fc --- /dev/null +++ b/indra/newview/llagentlanguage.h @@ -0,0 +1,45 @@ +/** + * @file llagentlanguage.h + * @brief Transmit language information to server + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLAGENTLANGUAGE_H +#define LL_LLAGENTLANGUAGE_H + +#include "llmemory.h" +#include "llevent.h" + +class LLAgentLanguage: public LLSingleton<LLAgentLanguage>, public LLSimpleListener +{ + public: +	LLAgentLanguage(); +	static bool update(); +}; + +#endif // LL_LLAGENTLANGUAGE_H diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp index f0bd452109..136afb78aa 100644 --- a/indra/newview/llagentpilot.cpp +++ b/indra/newview/llagentpilot.cpp @@ -45,12 +45,15 @@ LLAgentPilot gAgentPilot;  BOOL LLAgentPilot::sLoop = TRUE; -LLAgentPilot::LLAgentPilot() +LLAgentPilot::LLAgentPilot() : +	mNumRuns(-1), +	mQuitAfterRuns(FALSE), +	mRecording(FALSE), +	mLastRecordTime(0.f), +	mStarted(FALSE), +	mPlaying(FALSE), +	mCurrentAction(0)  { -	mRecording = FALSE; -	mPlaying = FALSE; -	mStarted = FALSE; -	mNumRuns = -1;  }  LLAgentPilot::~LLAgentPilot() diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 45fbb5e65f..10fe4a9a79 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1966,11 +1966,12 @@ bool LLAppViewer::initConfiguration()  				cmd += "linux-crash-logger.bin";  #else // LL_SOLARIS  				cmd += "bin/solaris-crash-logger"; -#endif +#endif // LL_LINUX  				char* const cmdargv[] =  					{(char*)cmd.c_str(),  					 (char*)"-previous",  					 NULL}; +				fflush(NULL); // flush all buffers before the child inherits them  				pid_t pid = fork();  				if (pid == 0)  				{ // child diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index b43c9db40a..3d2ae03d63 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -76,6 +76,7 @@ LLAssetUploadResponder::LLAssetUploadResponder(const LLSD &post_data,  											   const std::string& file_name)  	: LLHTTPClient::Responder(),  	  mPostData(post_data), +	  mAssetType(LLAssetType::AT_NONE),  	  mFileName(file_name)  {  } diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index 6aee25deca..bbcb7e64d4 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -122,6 +122,7 @@ LLCurrencyUIManager::Impl::Impl(LLPanel& dialog)  	mError(false),  	mUserCurrencyBuy(1000), mUserEnteredCurrencyBuy(false),  	mSiteCurrencyEstimated(false), +	  mSiteCurrencyEstimatedCost(0),  	mBought(false),  	mTransactionType(TransactionNone), mTransaction(0),  	mCurrencyChanged(false) diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp index 8e2069207f..d7fe6777e2 100644 --- a/indra/newview/lleventnotifier.cpp +++ b/indra/newview/lleventnotifier.cpp @@ -203,7 +203,8 @@ void LLEventNotifier::notifyCallback(S32 option, void *user_data)  LLEventNotification::LLEventNotification() :  	mEventID(0), -	mEventName("") +	mEventName(""), +	mEventDate(0)  {  } diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp index a82e6e914e..b875bd5baa 100644 --- a/indra/newview/llfloatergroupinvite.cpp +++ b/indra/newview/llfloatergroupinvite.cpp @@ -57,9 +57,10 @@ public:  //  std::map<LLUUID, LLFloaterGroupInvite*> LLFloaterGroupInvite::impl::sInstances; -LLFloaterGroupInvite::impl::impl(const LLUUID& group_id) +LLFloaterGroupInvite::impl::impl(const LLUUID& group_id) : +	mGroupID(group_id), +	mInvitePanelp(NULL)  { -	mGroupID = group_id;  }  LLFloaterGroupInvite::impl::~impl() diff --git a/indra/newview/llfollowcam.cpp b/indra/newview/llfollowcam.cpp index a370554ef6..bc91f4a579 100644 --- a/indra/newview/llfollowcam.cpp +++ b/indra/newview/llfollowcam.cpp @@ -264,6 +264,7 @@ LLFollowCam::LLFollowCam() : LLFollowCamParams()  	mSubjectRotation					= LLQuaternion::DEFAULT;  	mZoomedToMinimumDistance			= false; +	mPitchCos = mPitchSin = 0.f;  	mPitchSineAndCosineNeedToBeUpdated	= true;   	mSimulatedDistance = mDistance; diff --git a/indra/newview/llfollowcam.h b/indra/newview/llfollowcam.h index ab8ffb1fa4..1c5eb79697 100644 --- a/indra/newview/llfollowcam.h +++ b/indra/newview/llfollowcam.h @@ -169,8 +169,6 @@ public:  	// protected members of FollowCam  	//------------------------------------------  protected: -	F32		mPositionLagTimeScale;		// derived from mPositionLag -	F32		mFocusLagTimeScale;			// derived from mFocusLag  	F32		mPitchCos;					// derived from mPitch  	F32		mPitchSin;					// derived from mPitch  	LLGlobalVec		mSimulatedPositionGlobal;		// where the camera is (global coordinates), simulated diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp index 046eac73fe..5f4daf6f40 100644 --- a/indra/newview/llhudeffectlookat.cpp +++ b/indra/newview/llhudeffectlookat.cpp @@ -73,8 +73,11 @@ const F32 MAX_TIMEOUT = F32_MAX / 2.f;  class LLAttention  {  public: -	LLAttention(){} -	LLAttention(F32 timeout, F32 priority, char *name, LLColor3 color) : +	LLAttention() +		: mTimeout(0.f), +		  mPriority(0.f) +	{} +	LLAttention(F32 timeout, F32 priority, LLString name, LLColor3 color) :  	  mTimeout(timeout), mPriority(priority), mName(name), mColor(color)  	{  	} diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 5ae7c2a4e7..729165a2a4 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1369,7 +1369,9 @@ bool LLFindWearables::operator()(LLInventoryCategory* cat,  class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver  {  public: -	LLRightClickInventoryFetchObserver()  {}; +	LLRightClickInventoryFetchObserver() : +		mCopyItems(false) +	{ };  	LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :  		mCatID(cat_id),  		mCopyItems(copy_items) @@ -2237,7 +2239,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		if(accept && drop)  		{  			if (inv_item->getType() == LLAssetType::AT_GESTURE -				&& gGestureManager.isGestureActive(inv_item->getUUID())) +				&& gGestureManager.isGestureActive(inv_item->getUUID()) && move_is_into_trash)  			{  				gGestureManager.deactivateGesture(inv_item->getUUID());  			} diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index fb86366cc6..42df0c2ac8 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -193,7 +193,7 @@ void LLPanelGroup::updateTabVisibility()  		LLPanelGroupTab* panelp =  			(LLPanelGroupTab*) mTabContainer->getPanelByIndex(i); -		BOOL visible = panelp->isVisibleByAgent(&gAgent); +		BOOL visible = panelp->isVisibleByAgent(&gAgent) || gAgent.isGodlike();  		mTabContainer->enableTabButton(i, visible);  		if ( !visible && mCurrentTab == panelp ) diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index c04b1b72cd..5f11c4ac80 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -61,6 +61,9 @@ bool agentCanRemoveFromRole(const LLUUID& group_id,  bool agentCanAddToRole(const LLUUID& group_id,  					   const LLUUID& role_id)  { +	if (gAgent.isGodlike()) +		return true; +      	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_id);  	if (!gdatap)   	{ @@ -177,9 +180,6 @@ BOOL LLPanelGroupRoles::postBuild()  BOOL LLPanelGroupRoles::isVisibleByAgent(LLAgent* agentp)  { -	if (agentp->isGodlike()) -		return TRUE; -	  	/* This power was removed to make group roles simpler  	return agentp->hasPowerInGroup(mGroupID,   								   GP_ROLE_CREATE | @@ -1131,6 +1131,9 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()  	}  	mAssignedRolesList->setEnabled(TRUE); +	if (gAgent.isGodlike()) +		can_eject_members = TRUE; +  	if (!can_eject_members && !member_is_owner)  	{  		// Maybe we can eject them because we are an owner... diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 7f9dae8a64..830d1c008b 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -98,8 +98,8 @@ BOOL LLPanelPermissions::postBuild()  	this->childSetCommitCallback("checkbox for sale",LLPanelPermissions::onCommitSaleInfo,this); -	this->childSetCommitCallback("EdCost",LLPanelPermissions::onCommitSaleInfo,this); -	this->childSetPrevalidate("EdCost",LLLineEditor::prevalidateNonNegativeS32); +	this->childSetCommitCallback("Edit Cost",LLPanelPermissions::onCommitSaleInfo,this); +	this->childSetPrevalidate("Edit Cost",LLLineEditor::prevalidateNonNegativeS32);  	this->childSetCommitCallback("sale type",LLPanelPermissions::onCommitSaleType,this); @@ -229,9 +229,10 @@ void LLPanelPermissions::refresh()  			RadioSaleType->setEnabled(FALSE);  		} -		childSetEnabled("Price:  L$",false); -		childSetText("EdCost",LLString::null); -		childSetEnabled("EdCost",false); +		childSetEnabled("Cost",false); +		childSetText("Cost",LLString(childGetText("Cost Default"))); +		childSetText("Edit Cost",LLString::null); +		childSetEnabled("Edit Cost",false);  		childSetEnabled("label click action",false);  		LLComboBox*	ComboClickAction = getChild<LLComboBox>("clickaction"); @@ -405,56 +406,92 @@ void LLPanelPermissions::refresh()  	childSetText("prim info",object_info_string);  	childSetEnabled("prim info",true); -	S32 price; -	BOOL is_for_sale = LLSelectMgr::getInstance()->selectIsForSale(price); -	if (!is_for_sale) -	{ -		price = DEFAULT_PRICE; -	} - -	BOOL self_owned = (gAgent.getID() == mOwnerID); -	BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ; -	BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned()); -	BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer(); -	BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy(); +	S32 total_sale_price = 0; +	S32 individual_sale_price = 0; +	BOOL is_for_sale_mixed = FALSE; +	BOOL is_sale_price_mixed = FALSE; +	U32 num_for_sale = FALSE; +    LLSelectMgr::getInstance()->selectGetAggregateSaleInfo(num_for_sale, +										   is_for_sale_mixed, +										   is_sale_price_mixed, +										   total_sale_price, +										   individual_sale_price); + +	const BOOL self_owned = (gAgent.getID() == mOwnerID); +	const BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ; +	const BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned()); +	const BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer(); +	const BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy();  	if(!owners_identical)  	{ -		childSetEnabled("Price:  L$",false); -		childSetText("EdCost",LLString::null); -		childSetEnabled("EdCost",false); +		childSetEnabled("Cost",false); +		childSetText("Edit Cost",LLString::null); +		childSetEnabled("Edit Cost",false);  	} +	// You own these objects.  	else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))  	{ -		LLLineEditor*	EditPrice = getChild<LLLineEditor>("EdCost"); -		if(keyboard_focus_view != EditPrice) +		// If there are multiple items for sale then set text to PRICE PER UNIT. +		if (num_for_sale > 1)  		{ -			childSetText("EdCost",llformat("%d",price)); +			childSetText("Cost",childGetText("Cost Per Unit"));  		} -		if(is_for_sale && is_one_object && can_transfer) +		else  		{ -			childSetEnabled("Price:  L$",true); -			childSetEnabled("EdCost",true); +			childSetText("Cost",childGetText("Cost Default"));  		} -		else +		 +		LLLineEditor *editPrice = getChild<LLLineEditor>("Edit Cost"); +		if(keyboard_focus_view != editPrice)  		{ -			childSetEnabled("Price:  L$",false); -			childSetEnabled("EdCost",false); +			// If the sale price is mixed then set the cost to MIXED, otherwise +			// set to the actual cost. +			if (num_for_sale > 0 && is_for_sale_mixed) +			{ +				childSetText("Edit Cost",childGetText("Sale Mixed")); +			} +			else if (num_for_sale > 0 && is_sale_price_mixed) +			{ +				childSetText("Edit Cost",childGetText("Cost Mixed")); +			} +			else  +			{ +				childSetText("Edit Cost",llformat("%d",individual_sale_price)); +			}  		} +		// The edit fields are only enabled if you can sell this object +		// and the sale price is not mixed. +		bool enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : false; +		childSetEnabled("Cost",enable_edit); +		childSetEnabled("Edit Cost",enable_edit);  	} +	// Someone, not you, owns these objects.  	else if(!public_owned)  	{ -		// ...someone, not you, owns it -		childSetEnabled("Price:  L$",false); -		childSetText("EdCost",llformat("%d",price)); -		childSetEnabled("EdCost",false); +		childSetEnabled("Cost",false); +		childSetEnabled("Edit Cost",false); +		 +		// Don't show a price if none of the items are for sale. +		if (num_for_sale) +			childSetText("Edit Cost",llformat("%d",total_sale_price)); +		else +			childSetText("Edit Cost",LLString::null); + +		// If multiple items are for sale, set text to TOTAL PRICE. +		if (num_for_sale > 1) +			childSetText("Cost",childGetText("Cost Total")); +		else +			childSetText("Cost",childGetText("Cost Default"));  	} +	// This is a public object.  	else  	{ -		// ...public object -		childSetEnabled("Price:  L$",false); -		childSetText("EdCost",LLString::null); -		childSetEnabled("EdCost",false); +		childSetEnabled("Cost",false); +		childSetText("Cost",childGetText("Cost Default")); +		 +		childSetText("Edit Cost",LLString::null); +		childSetEnabled("Edit Cost",false);  	}  	// Enable and disable the permissions checkboxes @@ -590,8 +627,11 @@ void LLPanelPermissions::refresh()  	if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER))  	{ -		childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && is_for_sale)); -		childSetEnabled("sale type",is_for_sale && can_transfer); +		childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale)); +		// Set the checkbox to tentative if the prices of each object selected +		// are not the same. +		childSetTentative("checkbox for sale", is_for_sale_mixed); +		childSetEnabled("sale type",num_for_sale && can_transfer && !is_sale_price_mixed);  		childSetEnabled("Next owner can:", TRUE);  		childSetEnabled("checkbox next owner can modify",base_mask_on & PERM_MODIFY); @@ -733,21 +773,23 @@ void LLPanelPermissions::refresh()  		if (valid_sale_info)  		{  			RadioSaleType->setSelectedIndex((S32)sale_type - 1); +			RadioSaleType->setTentative(FALSE); // unfortunately this doesn't do anything at the moment.  		}  		else  		{  			// default option is sell copy, determined to be safest  			RadioSaleType->setSelectedIndex((S32)LLSaleInfo::FS_COPY - 1); +			RadioSaleType->setTentative(TRUE); // unfortunately this doesn't do anything at the moment.  		}  	} -	childSetValue("checkbox for sale", is_for_sale); +	childSetValue("checkbox for sale", num_for_sale != 0);  	// HACK: There are some old objects in world that are set for sale,  	// but are no-transfer.  We need to let users turn for-sale off, but only  	// if for-sale is set.  	bool cannot_actually_sell = !can_transfer || (!can_copy && sale_type == LLSaleInfo::FS_COPY); -	if (is_for_sale && has_change_sale_ability && cannot_actually_sell) +	if (num_for_sale && has_change_sale_ability && cannot_actually_sell)  	{  		childSetEnabled("checkbox for sale", true);  	} @@ -971,9 +1013,10 @@ void LLPanelPermissions::setAllSaleInfo()  	llinfos << "LLPanelPermissions::setAllSaleInfo()" << llendl;  	LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT; -	LLCheckBoxCtrl*	mCheckPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale"); - -	if(mCheckPurchase && mCheckPurchase->get()) +	LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale"); +	 +	// Set the sale type if the object(s) are for sale. +	if(checkPurchase && checkPurchase->get())  	{  		LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("sale type");  		if(RadioSaleType) @@ -995,23 +1038,37 @@ void LLPanelPermissions::setAllSaleInfo()  			}  		}  	} -	LLLineEditor*	mEditPrice = getChild<LLLineEditor>("EdCost");  	S32 price = -1; -	if(mEditPrice) +	 +	LLLineEditor *editPrice = getChild<LLLineEditor>("Edit Cost"); +	if (editPrice)  	{ -		price = atoi(mEditPrice->getText().c_str()); +		// Don't extract the price if it's labeled as MIXED or is empty. +		const char *editPriceString = editPrice->getText().c_str(); +		if (0 != strcmp(editPriceString,childGetText("Cost Mixed").c_str()) && +			0 != strcmp(editPriceString,"")) +		{ +			price = atoi(editPriceString); +		} +		else +		{ +			price = DEFAULT_PRICE; +		}  	} -	// Invalid data - turn off the sale +	// If somehow an invalid price, turn the sale off.  	if (price < 0) -	{  		sale_type = LLSaleInfo::FS_NOT; -		price = 0; -	} +	// Force the sale price of not-for-sale items to DEFAULT_PRICE. +	if (sale_type == LLSaleInfo::FS_NOT) +	{ +		price = DEFAULT_PRICE; +	} +	// Pack up the sale info and send the update.  	LLSaleInfo sale_info(sale_type, price);  	LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info); - +	  	// If turned off for-sale, make sure click-action buy is turned  	// off as well  	if (sale_type == LLSaleInfo::FS_NOT) diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index 85d5def673..947557e0b3 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -687,6 +687,12 @@ LLPolyMesh::LLPolyMesh(LLPolyMeshSharedData *shared_data, LLPolyMesh *reference_  	mAvatarp = NULL;  	mVertexData = NULL; +	mCurVertexCount = 0; +	mFaceIndexCount = 0; +	mFaceIndexOffset = 0; +	mFaceVertexCount = 0; +	mFaceVertexOffset = 0; +  	if (shared_data->isLOD() && reference_mesh)  	{  		mCoords = reference_mesh->mCoords; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 5eacb25ded..96c9ec113b 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -2827,27 +2827,53 @@ void LLSelectMgr::selectForceDelete()  		SEND_ONLY_ROOTS);  } - -// returns TRUE if anything is for sale. calculates the total price -// and stores that value in price. -BOOL LLSelectMgr::selectIsForSale(S32& price) +void LLSelectMgr::selectGetAggregateSaleInfo(U32 &num_for_sale, +											 BOOL &is_for_sale_mixed,  +											 BOOL &is_sale_price_mixed, +											 S32 &total_sale_price, +											 S32 &individual_sale_price)  { -	BOOL any_for_sale = FALSE; -	price = 0; +	num_for_sale = 0; +	is_for_sale_mixed = FALSE; +	is_sale_price_mixed = FALSE; +	total_sale_price = 0; +	individual_sale_price = 0; + +	// Empty set. +	if (getSelection()->root_begin() == getSelection()->root_end()) +		return; +	 +	LLSelectNode *node = *(getSelection()->root_begin()); +	const BOOL first_node_for_sale = node->mSaleInfo.isForSale(); +	const S32 first_node_sale_price = node->mSaleInfo.getSalePrice(); +	  	for (LLObjectSelection::root_iterator iter = getSelection()->root_begin();  		 iter != getSelection()->root_end(); iter++)  	{  		LLSelectNode* node = *iter; -		if (node->mSaleInfo.isForSale()) +		const BOOL node_for_sale = node->mSaleInfo.isForSale(); +		const S32 node_sale_price = node->mSaleInfo.getSalePrice(); +		 +		// Set mixed if the fields don't match the first node's fields. +		if (node_for_sale != first_node_for_sale)  +			is_for_sale_mixed = TRUE; +		if (node_sale_price != first_node_sale_price) +			is_sale_price_mixed = TRUE; +		 +		if (node_for_sale)  		{ -			price += node->mSaleInfo.getSalePrice(); -			any_for_sale = TRUE; +			total_sale_price += node_sale_price; +			num_for_sale ++;  		}  	} - -	return any_for_sale; - +	 +	individual_sale_price = first_node_sale_price; +	if (is_for_sale_mixed) +	{ +		is_sale_price_mixed = TRUE; +		individual_sale_price = 0; +	}  }  // returns TRUE if all nodes are valid. method also stores an @@ -3503,8 +3529,6 @@ void LLSelectMgr::selectionSetObjectCategory(const LLCategory& category)  void LLSelectMgr::selectionSetObjectSaleInfo(const LLSaleInfo& sale_info)  { -	// Only one sale info at a time for now -	if(mSelectedObjects->getRootObjectCount() != 1) return;  	sendListToRegions("ObjectSaleInfo",  					  packAgentAndSessionID,  					  packObjectSaleInfo, diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 4a8f99db1f..6ae688bae6 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -558,10 +558,14 @@ public:  	// returns TRUE if all the nodes are valid. Accumulates  	// permissions in the parameter.  	BOOL selectGetPermissions(LLPermissions& perm); - -	// returns TRUE if anything is for sale. calculates the total -	// price and stores that value in price. -	BOOL selectIsForSale(S32& price); +	 +	// Get a bunch of useful sale information for the object(s) selected. +	// "_mixed" is true if not all objects have the same setting. +	void selectGetAggregateSaleInfo(U32 &num_for_sale, +									BOOL &is_for_sale_mixed,  +									BOOL &is_sale_price_mixed, +									S32 &total_sale_price, +									S32 &individual_sale_price);  	// returns TRUE if all nodes are valid.   	BOOL selectGetCategory(LLCategory& category); diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp index f74173425c..1348f85201 100644 --- a/indra/newview/llsprite.cpp +++ b/indra/newview/llsprite.cpp @@ -59,30 +59,18 @@ LLVector3 LLSprite::sNormal(0.0f,0.0f,0.0f);  //////////////////////////////////////////////////////////////////////  // A simple initialization -LLSprite::LLSprite(const LLUUID &image_uuid) +LLSprite::LLSprite(const LLUUID &image_uuid) : +	mImageID(image_uuid), +	mImagep(NULL), +	mPitch(0.f), +	mYaw(0.f), +	mPosition(0.0f, 0.0f, 0.0f), +	mFollow(TRUE), +	mUseCameraUp(TRUE), +	mColor(0.5f, 0.5f, 0.5f, 1.0f), +	mTexMode(GL_REPLACE)  { -	mImageID = image_uuid; -	mImagep = NULL; -  	setSize(1.0f, 1.0f); -	setPosition(LLVector3(0.0f, 0.0f, 0.0f)); -	mTexMode = GL_REPLACE; -	mColor.setVec(0.5f, 0.5f, 0.5f, 1.0f); -	mFollow = TRUE; -	mUseCameraUp = TRUE; -} - -LLSprite::LLSprite(const LLUUID &image_uuid, const F32 width, const F32 height, const BOOL b_usemipmap) -{ -	mImageID = image_uuid; -	mImagep = NULL; - -	setSize(width,height); -	setPosition(LLVector3(0.0f, 0.0f, 0.0f)); -	mTexMode = GL_REPLACE; -	mColor.setVec(0.5f, 0.5f, 0.5f, 1.0f); -	mFollow = TRUE; -	mUseCameraUp = TRUE;  }  ////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llsprite.h b/indra/newview/llsprite.h index 04d30b8e7c..322150e85b 100644 --- a/indra/newview/llsprite.h +++ b/indra/newview/llsprite.h @@ -49,7 +49,6 @@ class LLSprite  {  public:  	LLSprite(const LLUUID &image_uuid); -	LLSprite(const LLUUID &image_uuid, const F32 width, const F32 height, const BOOL b_usemipmap = TRUE);  	~LLSprite();  	void render(LLViewerCamera * camerap); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 7d9bab59df..4844f2d81e 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -174,6 +174,11 @@  #include "llpostprocess.h"  #include "llwlparammanager.h"  #include "llwaterparammanager.h" +#include "llagentlanguage.h" + +#if LL_LIBXUL_ENABLED +#include "llmozlib.h" +#endif // LL_LIBXUL_ENABLED  #if LL_WINDOWS  #include "llwindebug.h" @@ -469,7 +474,7 @@ BOOL idle_startup()  		}  		else  		{ -			LLAppViewer::instance()->earlyExit("Unable to initialize communications."); +			LLAppViewer::instance()->earlyExit("Message Template " + message_template_path + " not found.");  		}  		if(gMessageSystem && gMessageSystem->isOK()) @@ -2147,6 +2152,10 @@ BOOL idle_startup()  		// JC - 7/20/2002  		gViewerWindow->sendShapeToSim(); +		// Inform simulator of our language preference +		LLAgentLanguage::update(); + +		  		// Ignore stipend information for now.  Money history is on the web site.  		// if needed, show the L$ history window  		//if (stipend_since_login && !gNoRender) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 94f8b8ae67..6697b06659 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -1,33 +1,33 @@  /**  - * @file llstatusbar.cpp - * @brief LLStatusBar class implementation - * - * $LicenseInfo:firstyear=2002&license=viewergpl$ - *  - * Copyright (c) 2002-2007, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ +* @file llstatusbar.cpp +* @brief LLStatusBar class implementation +* +* $LicenseInfo:firstyear=2002&license=viewergpl$ +*  +* Copyright (c) 2002-2007, Linden Research, Inc. +*  +* Second Life Viewer Source Code +* The source code in this file ("Source Code") is provided by Linden Lab +* to you under the terms of the GNU General Public License, version 2.0 +* ("GPL"), unless you have obtained a separate licensing agreement +* ("Other License"), formally executed by you and Linden Lab.  Terms of +* the GPL can be found in doc/GPL-license.txt in this distribution, or +* online at http://secondlife.com/developers/opensource/gplv2 +*  +* There are special exceptions to the terms and conditions of the GPL as +* it is applied to this Source Code. View the full text of the exception +* in the file doc/FLOSS-exception.txt in this software distribution, or +* online at http://secondlife.com/developers/opensource/flossexception +*  +* By copying, modifying or distributing this software, you acknowledge +* that you have read and understood your obligations described above, +* and agree to abide by those obligations. +*  +* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +* COMPLETENESS OR PERFORMANCE. +* $/LicenseInfo$ +*/  #include "llviewerprecompiledheaders.h" @@ -121,10 +121,10 @@ const U32 LLStatusBar::MAX_DATE_STRING_LENGTH = 2000;  LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)  :	LLPanel(name, LLRect(), FALSE),		// not mouse opaque -	mBalance(0), -	mHealth(100), -	mSquareMetersCredit(0), -	mSquareMetersCommitted(0) +mBalance(0), +mHealth(100), +mSquareMetersCredit(0), +mSquareMetersCommitted(0)  {  	// status bar can possible overlay menus?  	setMouseOpaque(FALSE); @@ -150,7 +150,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)  	mTextHealth = getChild<LLTextBox>("HealthText" );  	mTextTime = getChild<LLTextBox>("TimeText" ); -	 +  	childSetAction("scriptout", onClickScriptDebug, this);  	childSetAction("health", onClickHealth, this);  	childSetAction("no_fly", onClickFly, this); @@ -233,8 +233,8 @@ void LLStatusBar::draw()  	if (isBackgroundVisible())  	{  		gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,  -				LLUI::sColorsGroup->getColor("ColorDropShadow"),  -				LLUI::sConfigGroup->getS32("DropShadowFloater") ); +			LLUI::sColorsGroup->getColor("ColorDropShadow"),  +			LLUI::sConfigGroup->getS32("DropShadowFloater") );  	}  	LLPanel::draw();  } @@ -252,7 +252,7 @@ void LLStatusBar::refresh()  	mSGBandwidth->setThreshold(2, bwtotal);  	// *TODO: Localize / translate time -	 +  	// Get current UTC time, adjusted for the user's clock  	// being off.  	U32 utc_time; @@ -284,23 +284,23 @@ void LLStatusBar::refresh()  	if (hour == 0) hour = 12;  	std::ostringstream t;  	t << std::setfill(' ') << std::setw(2) << hour << ":"  -	  << std::setfill('0') << std::setw(2) << min  -	  << " " << am_pm << " " << tz; +		<< std::setfill('0') << std::setw(2) << min  +		<< " " << am_pm << " " << tz;  	mTextTime->setText(t.str());  	// Year starts at 1900, set the tooltip to have the date  	std::ostringstream date;  	date	<< sDays[internal_time->tm_wday] << ", " -			<< std::setfill('0') << std::setw(2) << internal_time->tm_mday << " " -			<< sMonths[internal_time->tm_mon] << " " -			<< internal_time->tm_year + 1900; +		<< std::setfill('0') << std::setw(2) << internal_time->tm_mday << " " +		<< sMonths[internal_time->tm_mon] << " " +		<< internal_time->tm_year + 1900;  	mTextTime->setToolTip(date.str());  	LLRect r;  	const S32 MENU_RIGHT = gMenuBarView->getRightmostMenuEdge();  	S32 x = MENU_RIGHT + MENU_PARCEL_SPACING;  	S32 y = 0; -	 +  	bool search_visible = gSavedSettings.getBOOL("ShowSearchBar");  	// reshape menu bar to its content's width @@ -394,8 +394,8 @@ void LLStatusBar::refresh()  	BOOL no_scripts = FALSE;  	if((region  		&& ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) -			|| (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS))) -	   || (parcel && !parcel->getAllowOtherScripts())) +		|| (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS))) +		|| (parcel && !parcel->getAllowOtherScripts()))  	{  		no_scripts = TRUE;  	} @@ -487,15 +487,15 @@ void LLStatusBar::refresh()  		mRegionDetails.mTime = mTextTime->getText();  		mRegionDetails.mBalance = mBalance; -		mRegionDetails.mAccesString = region->getSimAccessString(); +		mRegionDetails.mAccessString = region->getSimAccessString();  		mRegionDetails.mPing = region->getNetDetailsForLCD(); -		if (parcel && !parcel->getName().empty()) +		if (parcel)  		{  			location_name = region->getName()  				+ llformat(" %d, %d, %d (%s) - %s",  -						   pos_x, pos_y, pos_z, -						   region->getSimAccessString(), -						   parcel->getName().c_str()); +				pos_x, pos_y, pos_z, +				region->getSimAccessString(), +				parcel->getName().c_str());  			// keep these around for the LCD to use  			mRegionDetails.mRegionName = region->getName(); @@ -503,6 +503,7 @@ void LLStatusBar::refresh()  			mRegionDetails.mX = pos_x;  			mRegionDetails.mY = pos_y;  			mRegionDetails.mZ = pos_z; +  			mRegionDetails.mArea = parcel->getArea();  			mRegionDetails.mForSale = parcel->getForSale();  			mRegionDetails.mTraffic = LLViewerParcelMgr::getInstance()->getDwelling(); @@ -557,7 +558,7 @@ void LLStatusBar::refresh()  		// keep these around for the LCD to use  		mRegionDetails.mRegionName = "Unknown";  		mRegionDetails.mParcelName = "Unknown"; -		mRegionDetails.mAccesString = "Unknown"; +		mRegionDetails.mAccessString = "Unknown";  		mRegionDetails.mX = 0;  		mRegionDetails.mY = 0;  		mRegionDetails.mZ = 0; diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 91bc787485..99bac2471f 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -54,7 +54,7 @@ public:  	LLRegionDetails() :  		mRegionName("Unknown"),  		mParcelName("Unknown"), -		mAccesString("Unknown"), +		mAccessString("Unknown"),  		mX(0),  		mY(0),  		mZ(0), @@ -68,7 +68,7 @@ public:  	}  	std::string mRegionName;  	std::string	mParcelName; -	std::string	mAccesString; +	std::string	mAccessString;  	S32		mX;  	S32		mY;  	S32		mZ; diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index 6618e3d631..fa85d89388 100644 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -73,7 +73,9 @@ LLSurface::LLSurface(U32 type, LLViewerRegion *regionp) :  	mGridsPerEdge(0),  	mOOGridsPerEdge(0.f),  	mPatchesPerEdge(0), +	mNumberOfPatches(0),  	mType(type), +	mDetailTextureScale(0.f),  	mOriginGlobal(0.0, 0.0, 0.0),  	mSTexturep(NULL),  	mWaterTexturep(NULL), diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h index c806d804f1..4e57d7017d 100644 --- a/indra/newview/llsurface.h +++ b/indra/newview/llsurface.h @@ -217,9 +217,6 @@ protected:  	F32			mMetersPerGrid;				// Converts (i,j) indecies to distance  	F32			mMetersPerEdge;				// = mMetersPerGrid * (mGridsPerEdge-1) -	F32			mSurfaceTexScale;			// Scale factors for automatic tex coord generation -	F32			mDetailTexScale; -  	LLPatchVertexArray mPVArray;  	BOOL		mHasZData;				// We've received any patch data for this surface. diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 7a475f21ba..2877fc66e3 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -52,28 +52,29 @@ extern U64 gFrameTime;  extern LLPipeline gPipeline;  LLSurfacePatch::LLSurfacePatch() : -						mDataZ(NULL), -						mVObjp(NULL), -						mLastUpdateTime(0), -						mSurfacep(NULL) -{ -	// This flag is used to communicate between adjacent surfaces and is set -	// to non-zero values by higher classes.   -	mConnectedEdge = NO_EDGE; -	mCenterRegion = LLVector3(0.f, 0.f, 0.f); -	mOriginRegion = LLVector3(0.f, 0.f, 0.f); -	mHasReceivedData = FALSE; -	mMinZ = 0.0f; -	mMaxZ = 0.0f; -	mMeanZ = 0.0f; -	mMinComposition = 0.f; -	mMeanComposition = 0.f; -	mMaxComposition = 0.f; -	mRadius = 0.f; -	mDirty = FALSE; -	mDirtyZStats = TRUE; -	mHeightsGenerated = FALSE; -	 +	mHasReceivedData(FALSE), +	mSTexUpdate(FALSE), +	mDirty(FALSE), +	mDirtyZStats(TRUE), +	mHeightsGenerated(FALSE), +	mDataOffset(0), +	mDataZ(NULL), +	mVObjp(NULL), +	mOriginRegion(0.f, 0.f, 0.f), +	mCenterRegion(0.f, 0.f, 0.f), +	mMinZ(0.f), +	mMaxZ(0.f), +	mMeanZ(0.f), +	mRadius(0.f), +	mMinComposition(0.f), +	mMaxComposition(0.f), +	mMeanComposition(0.f), +	// This flag is used to communicate between adjacent surfaces and is +	// set to non-zero values by higher classes.   +	mConnectedEdge(NO_EDGE), +	mLastUpdateTime(0), +	mSurfacep(NULL) +{	  	S32 i;  	for (i = 0; i < 8; i++)  	{ diff --git a/indra/newview/llsurfacepatch.h b/indra/newview/llsurfacepatch.h index 0f91e7715e..c1f9fda860 100644 --- a/indra/newview/llsurfacepatch.h +++ b/indra/newview/llsurfacepatch.h @@ -44,9 +44,17 @@ class LLAgent;  // A patch shouldn't know about its visibility since that really depends on the   // camera that is looking (or not looking) at it.  So, anything about a patch -// that is specific to a camera should be in the struct below. -struct LLPatchVisibilityInfo +// that is specific to a camera should be in the class below. +class LLPatchVisibilityInfo  { +public: +	LLPatchVisibilityInfo() : +		mbIsVisible(FALSE), +		mDistance(0.f), +		mRenderLevel(0), +		mRenderStride(0) { }; +	~LLPatchVisibilityInfo() { }; +  	BOOL mbIsVisible;  	F32 mDistance;			// Distance from camera  	S32 mRenderLevel; @@ -153,7 +161,7 @@ protected:  	// Pointer to the LLVOSurfacePatch object which is used in the new renderer.  	LLPointer<LLVOSurfacePatch> mVObjp; -	// All of the camera-dependent stuff should be in its own structure... +	// All of the camera-dependent stuff should be in its own class...  	LLPatchVisibilityInfo mVisInfo;  	// pointers to beginnings of patch data fields diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index 94501507ab..5073be3173 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -81,9 +81,16 @@ LLToolGrab::LLToolGrab( LLToolComposite* composite )  	mHitLand(FALSE),  	mHitObjectID(),  	mGrabObject( NULL ), +	mLastMouseX(0), +	mLastMouseY(0),  	mMouseDownX( -1 ),  	mMouseDownY( -1 ), +	mMouseMask(0), +	mAccumDeltaX(0), +	mAccumDeltaY(0),  	mHasMoved( FALSE ), +	mOutsideSlop(FALSE), +	mDeselectedThisClick(FALSE),  	mSpinGrabbing( FALSE ),  	mSpinRotation(),  	mHideBuildHighlight(FALSE) diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index 40ae4e49a6..e7559d866b 100644 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -90,7 +90,8 @@ LLTracker::LLTracker()  	mHasLandmarkPosition(FALSE),  	mLandmarkHasBeenVisited(FALSE),  	mTrackedLocationName( "" ), -	mIsTrackingLocation(FALSE) +	mIsTrackingLocation(FALSE), +	mHasReachedLocation(FALSE)  { } diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index e21c14637b..aecb1daedc 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -564,7 +564,8 @@ void bind_keyboard_functions()  	gViewerKeyboard.bindNamedFunction("start_gesture", start_gesture);  } -LLViewerKeyboard::LLViewerKeyboard() +LLViewerKeyboard::LLViewerKeyboard() : +	mNamedFunctionCount(0)  {  	for (S32 i = 0; i < MODE_COUNT; i++)  	{ diff --git a/indra/newview/llviewerkeyboard.h b/indra/newview/llviewerkeyboard.h index fd024d0902..df31e17c70 100644 --- a/indra/newview/llviewerkeyboard.h +++ b/indra/newview/llviewerkeyboard.h @@ -40,6 +40,9 @@ const S32 MAX_KEY_BINDINGS = 128; // was 60  class LLNamedFunction  {  public: +	LLNamedFunction() : mName(NULL), mFunction(NULL) { }; +	~LLNamedFunction() { }; +  	const char *mName;  	LLKeyFunc	mFunction;  }; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 499476e065..c8717b2306 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1504,6 +1504,7 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)  ////////////////////////////////////////////////////////////////////////////  LLViewerObjectList::OrphanInfo::OrphanInfo() +	: mParentInfo(0)  {  } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 61aa51a6d8..f14d206b7f 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -112,16 +112,20 @@ struct LLGodForceOwnerData  //  LLViewerParcelMgr::LLViewerParcelMgr()  :	mSelected(FALSE), +	mRequestResult(0),  	mWestSouth(),  	mEastNorth(),  	mSelectedDwell(0.f),  	mAgentParcelSequenceID(-1), +	mHoverRequestResult(0),  	mHoverWestSouth(),  	mHoverEastNorth(),  	mRenderCollision(FALSE),  	mRenderSelection(TRUE),  	mCollisionBanned(0), -	mCollisionTimer() +	mCollisionTimer(), +	mMediaParcelId(0), +	mMediaRegionId(0)  {  	mCurrentParcel = new LLParcel();  	mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 4b7c849171..fad061f2d2 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1394,6 +1394,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)  	capabilityNames.append("SendUserReportWithScreenshot");  	capabilityNames.append("ServerReleaseNotes");  	capabilityNames.append("StartGroupProposal"); +	capabilityNames.append("UpdateAgentLanguage");  	capabilityNames.append("UpdateGestureAgentInventory");  	capabilityNames.append("UpdateNotecardAgentInventory");  	capabilityNames.append("UpdateScriptAgentInventory"); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index bba9fe1ccf..e61a6bddf8 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -218,6 +218,19 @@ void LLVivoxProtocolParser::reset()  	ignoringTags = false;  	accumulateText = false;  	textBuffer.clear(); + +	energy = 0.f; +	ignoreDepth = 0; +	isChannel = false; +	isEvent = false; +	isLocallyMuted = false; +	isModeratorMuted = false; +	isSpeaking = false; +	participantType = 0; +	returnCode = 0; +	state = 0; +	statusCode = 0; +	volume = 0;  }  //virtual  @@ -1329,6 +1342,7 @@ void LLVoiceClient::stateMachine()  							fakeargv[i] = NULL; +							fflush(NULL); // flush all buffers before the child inherits them  							pid_t id = vfork();  							if(id == 0)  							{ @@ -3018,7 +3032,7 @@ void LLVoiceClient::muteListChanged()  /////////////////////////////  // Managing list of participants  LLVoiceClient::participantState::participantState(const std::string &uri) :  -	 mURI(uri), mPTT(false), mIsSpeaking(false), mIsModeratorMuted(false), mPower(0.0), mServiceType(serviceTypeUnknown), +	 mURI(uri), mPTT(false), mIsSpeaking(false), mIsModeratorMuted(false), mLastSpokeTimestamp(0.f), mPower(0.f), mVolume(0), mServiceType(serviceTypeUnknown),  	 mOnMuteList(false), mUserVolume(100), mVolumeDirty(false), mAvatarIDValid(false)  {  } diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index e45b929b6f..07f4cbe0f0 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -84,13 +84,12 @@ const F32 LLWorld::mWidthInMeters = mWidth * mScale;  // allocate the stack  LLWorld::LLWorld() +:	mLandFarClip(DEFAULT_FAR_PLANE), +	mLastPacketsIn(0), +	mLastPacketsOut(0), +	mLastPacketsLost(0), +	mSpaceTimeUSec(0)  { -	mSpaceTimeUSec = 0; -	mLastPacketsIn = 0; -	mLastPacketsOut = 0; -	mLastPacketsLost = 0; -	mLandFarClip = DEFAULT_FAR_PLANE; -  	if (gNoRender)  	{  		return; diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h index 9dd90480b6..d65c91a6a6 100644 --- a/indra/newview/llworld.h +++ b/indra/newview/llworld.h @@ -170,22 +170,17 @@ private:  	S32 mLastPacketsOut;  	S32 mLastPacketsLost; +	U64 mSpaceTimeUSec; +  	////////////////////////////  	//  	// Data for "Fake" objects  	// -	// Used to define the "Square" which we need to fill in -	U32 mMinRegionX; -	U32 mMaxRegionX; -	U32 mMinRegionY; -	U32 mMaxRegionY; -  	std::list<LLVOWater*> mHoleWaterObjects;  	LLPointer<LLVOWater> mEdgeWaterObjects[8];  	LLPointer<LLViewerImage> mDefaultWaterTexturep; -	U64 mSpaceTimeUSec;  }; diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 1bd08c0430..62d12603a0 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -67,6 +67,7 @@ LLSimInfo::LLSimInfo()  :	mHandle(0),  	mName(),  	mAgentsUpdateTime(0), +	mShowAgentLocations(FALSE),  	mAccess(0x0),  	mRegionFlags(0x0),  	mWaterHeight(0.f), | 
