diff options
| author | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-01-22 16:28:45 +0200 | 
|---|---|---|
| committer | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-01-22 16:28:45 +0200 | 
| commit | 5f334e18b837493f9c6f7a62eb61f0aeec94d28b (patch) | |
| tree | 048347781b2f7adf0c1a20b2c2033400c7ab203b | |
| parent | 7f42a0e8affe1a3394116d1457830f774deb7438 (diff) | |
| parent | 1fb9389822405bae537d7203cd56ffee5f717664 (diff) | |
merge
--HG--
branch : product-engine
| -rw-r--r-- | indra/llcommon/llerrorlegacy.h | 4 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 214 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 38 | ||||
| -rw-r--r-- | indra/newview/llpanelface.cpp | 40 | ||||
| -rw-r--r-- | indra/newview/llpanellandaudio.cpp | 62 | ||||
| -rw-r--r-- | indra/newview/llpanellandaudio.h | 4 | ||||
| -rw-r--r-- | indra/newview/lltexlayer.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewermedia.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llviewerparcelmedia.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewertexturelist.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_about_land.xml | 3 | 
12 files changed, 265 insertions, 140 deletions
| diff --git a/indra/llcommon/llerrorlegacy.h b/indra/llcommon/llerrorlegacy.h index 7a970b1466..9920921a58 100644 --- a/indra/llcommon/llerrorlegacy.h +++ b/indra/llcommon/llerrorlegacy.h @@ -75,6 +75,10 @@ const int LL_ERR_PRICE_MISMATCH = -23018;  #define SHOW_ASSERT  #else // _DEBUG +#ifdef LL_RELEASE_WITH_DEBUG_INFO +#define SHOW_ASSERT +#endif // LL_RELEASE_WITH_DEBUG_INFO +  #ifdef RELEASE_SHOW_DEBUG  #define SHOW_DEBUG  #endif diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 748d8bdfbf..61d60fdff9 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -274,6 +274,7 @@ private:  struct LLFoundData  { +	LLFoundData() {}  	LLFoundData(const LLUUID& item_id,  				const LLUUID& asset_id,  				const std::string& name, @@ -292,20 +293,94 @@ struct LLFoundData  }; -struct LLWearableHoldingPattern +class LLWearableHoldingPattern  { -	LLWearableHoldingPattern() : mResolved(0) {} -	~LLWearableHoldingPattern() -	{ -		for_each(mFoundList.begin(), mFoundList.end(), DeletePointer()); -		mFoundList.clear(); -	} -	typedef std::list<LLFoundData*> found_list_t; +public: +	LLWearableHoldingPattern(); +	~LLWearableHoldingPattern(); + +	bool pollCompletion(); +	bool isDone(); +	bool isTimedOut(); +	 +	typedef std::list<LLFoundData> found_list_t;  	found_list_t mFoundList; +	LLInventoryModel::item_array_t mObjItems; +	LLInventoryModel::item_array_t mGestItems;  	S32 mResolved; -	bool append; +	LLTimer mWaitTime;  }; +LLWearableHoldingPattern::LLWearableHoldingPattern(): +	mResolved(0) +{ +} + +LLWearableHoldingPattern::~LLWearableHoldingPattern() +{ +} + +bool LLWearableHoldingPattern::isDone() +{ +	if (mResolved >= (S32)mFoundList.size()) +		return true; // have everything we were waiting for +	else if (isTimedOut()) +	{ +		llwarns << "Exceeded max wait time, updating appearance based on what has arrived" << llendl; +		return true; +	} +	return false; + +} + +bool LLWearableHoldingPattern::isTimedOut() +{ +	static F32 max_wait_time = 15.0;  // give up if wearable fetches haven't completed in max_wait_time seconds. +	return mWaitTime.getElapsedTimeF32() > max_wait_time;  +} + +bool LLWearableHoldingPattern::pollCompletion() +{ +	bool done = isDone(); +	llinfos << "polling, done status: " << done << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl; +	if (done) +	{ +		// Activate all gestures in this folder +		if (mGestItems.count() > 0) +		{ +			llinfos << "Activating " << mGestItems.count() << " gestures" << llendl; +			 +			LLGestureManager::instance().activateGestures(mGestItems); +			 +			// Update the inventory item labels to reflect the fact +			// they are active. +			LLViewerInventoryCategory* catp = +				gInventory.getCategory(LLAppearanceManager::instance().getCOF()); + +			if (catp) +			{ +				gInventory.updateCategory(catp); +				gInventory.notifyObservers(); +			} +		} + +		// Update wearables. +		llinfos << "Updating agent wearables with " << mResolved << " wearable items " << llendl; +		LLAppearanceManager::instance().updateAgentWearables(this, false); +		 +		// Update attachments to match those requested. +		LLVOAvatar* avatar = gAgent.getAvatarObject(); +		if( avatar ) +		{ +			llinfos << "Updating " << mObjItems.count() << " attachments" << llendl; +			LLAgentWearables::userUpdateAttachments(mObjItems); +		} + +		delete this; +	} +	return done; +} +  static void removeDuplicateItems(LLInventoryModel::item_array_t& items)  {  	LLInventoryModel::item_array_t new_items; @@ -336,26 +411,21 @@ static void removeDuplicateItems(LLInventoryModel::item_array_t& items)  static void onWearableAssetFetch(LLWearable* wearable, void* data)  {  	LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data; -	bool append = holder->append;  	if(wearable)  	{  		for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin();  			 iter != holder->mFoundList.end(); ++iter)  		{ -			LLFoundData* data = *iter; -			if(wearable->getAssetID() == data->mAssetID) +			LLFoundData& data = *iter; +			if(wearable->getAssetID() == data.mAssetID)  			{ -				data->mWearable = wearable; +				data.mWearable = wearable;  				break;  			}  		}  	}  	holder->mResolved += 1; -	if(holder->mResolved >= (S32)holder->mFoundList.size()) -	{ -		LLAppearanceManager::instance().updateAgentWearables(holder, append); -	}  }  LLUUID LLAppearanceManager::getCOF() @@ -662,12 +732,12 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,  		for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin();  			 iter != holder->mFoundList.end(); ++iter)  		{ -			LLFoundData* data = *iter; -			LLWearable* wearable = data->mWearable; +			LLFoundData& data = *iter; +			LLWearable* wearable = data.mWearable;  			if( wearable && ((S32)wearable->getType() == i) )  			{  				LLViewerInventoryItem* item; -				item = (LLViewerInventoryItem*)gInventory.getItem(data->mItemID); +				item = (LLViewerInventoryItem*)gInventory.getItem(data.mItemID);  				if( item && (item->getAssetUUID() == wearable->getAssetID()) )  				{  					items.put(item); @@ -683,8 +753,6 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,  		gAgentWearables.setWearableOutfit(items, wearables, !append);  	} -	delete holder; -  //	dec_busy_count();  } @@ -706,86 +774,66 @@ void LLAppearanceManager::updateAppearanceFromCOF()  	LLInventoryModel::item_array_t gest_items;  	getUserDescendents(current_outfit_id, wear_items, obj_items, gest_items, follow_folder_links); -	if( !wear_items.count() && !obj_items.count() && !gest_items.count()) +	if(!wear_items.count())  	{  		LLNotificationsUtil::add("CouldNotPutOnOutfit");  		return;  	} -		 -	// Processes that take time should show the busy cursor -	//inc_busy_count(); // BAP this is currently a no-op in llinventorybridge.cpp - do we need it? -		 -	// Activate all gestures in this folder -	if (gest_items.count() > 0) -	{ -		llinfos << "Activating " << gest_items.count() << " gestures" << llendl; -		LLGestureManager::instance().activateGestures(gest_items); +	LLWearableHoldingPattern* holder = new LLWearableHoldingPattern; -		// Update the inventory item labels to reflect the fact -		// they are active. -		LLViewerInventoryCategory* catp = gInventory.getCategory(current_outfit_id); -		if (catp) +	holder->mObjItems = obj_items; +	holder->mGestItems = gest_items; +		 +	// Note: can't do normal iteration, because if all the +	// wearables can be resolved immediately, then the +	// callback will be called (and this object deleted) +	// before the final getNextData(). +	LLDynamicArray<LLFoundData> found_container; +	for(S32 i = 0; i  < wear_items.count(); ++i) +	{ +		LLViewerInventoryItem *item = wear_items.get(i); +		LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL; +		if (item && linked_item)  		{ -			gInventory.updateCategory(catp); -			gInventory.notifyObservers(); +			LLFoundData found(linked_item->getUUID(), +							  linked_item->getAssetUUID(), +							  linked_item->getName(), +							  linked_item->getType()); +			holder->mFoundList.push_front(found); +			found_container.put(found);  		} -	} - -	if(wear_items.count() > 0) -	{ -		// Note: can't do normal iteration, because if all the -		// wearables can be resolved immediately, then the -		// callback will be called (and this object deleted) -		// before the final getNextData(). -		LLWearableHoldingPattern* holder = new LLWearableHoldingPattern; -		LLFoundData* found; -		LLDynamicArray<LLFoundData*> found_container; -		for(S32 i = 0; i  < wear_items.count(); ++i) +		else  		{ -			LLViewerInventoryItem *item = wear_items.get(i); -			LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL; -			if (item && linked_item) +			if (!item)  			{ -				found = new LLFoundData(linked_item->getUUID(), -										linked_item->getAssetUUID(), -										linked_item->getName(), -										linked_item->getType()); -				holder->mFoundList.push_front(found); -				found_container.put(found); +				llwarns << "attempt to wear a null item " << llendl;  			} -			else +			else if (!linked_item)  			{ -				if (!item) -				{ -					llwarns << "attempt to wear a null item " << llendl; -				} -				else if (!linked_item) -				{ -					llwarns << "attempt to wear a broken link " << item->getName() << llendl; -				} +				llwarns << "attempt to wear a broken link " << item->getName() << llendl;  			}  		} -		for(S32 i = 0; i < found_container.count(); ++i) -		{ -			holder->append = false; -			found = found_container.get(i); +	} + +	for(S32 i = 0; i < found_container.count(); ++i) +	{ +		LLFoundData& found = found_container.get(i); -			// Fetch the wearables about to be worn. -			LLWearableList::instance().getAsset(found->mAssetID, -												found->mName, -												found->mAssetType, -												onWearableAssetFetch, -												(void*)holder); -		} +		// Fetch the wearables about to be worn. +		LLWearableList::instance().getAsset(found.mAssetID, +											found.mName, +											found.mAssetType, +											onWearableAssetFetch, +											(void*)holder); +  	} -	// Update attachments to match those requested. -	LLVOAvatar* avatar = gAgent.getAvatarObject(); -	if( avatar ) +	if (!holder->pollCompletion())  	{ -		LLAgentWearables::userUpdateAttachments(obj_items); +		doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollCompletion,holder));  	} +  }  void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category, diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 20745b70e4..517face777 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -39,7 +39,7 @@  #include "llcallbacklist.h"  class LLWearable; -struct LLWearableHoldingPattern; +class LLWearableHoldingPattern;  class LLAppearanceManager: public LLSingleton<LLAppearanceManager>  { @@ -168,4 +168,40 @@ void doOnIdle(T callable)  	gIdleCallbacks.addFunction(&OnIdleCallback<T>::onIdle,cb_functor);  } +// Shim class and template function to allow arbitrary boost::bind +// expressions to be run as recurring idle callbacks. +template <typename T> +class OnIdleCallbackRepeating +{ +public: +	OnIdleCallbackRepeating(T callable): +		mCallable(callable) +	{ +	} +	// Will keep getting called until the callable returns false. +	static void onIdle(void *data) +	{ +		OnIdleCallbackRepeating<T>* self = reinterpret_cast<OnIdleCallbackRepeating<T>*>(data); +		bool done = self->call(); +		if (done) +		{ +			gIdleCallbacks.deleteFunction(onIdle, data); +			delete self; +		} +	} +	bool call() +	{ +		return mCallable(); +	} +private: +	T mCallable; +}; + +template <typename T> +void doOnIdleRepeating(T callable) +{ +	OnIdleCallbackRepeating<T>* cb_functor = new OnIdleCallbackRepeating<T>(callable); +	gIdleCallbacks.addFunction(&OnIdleCallbackRepeating<T>::onIdle,cb_functor); +} +  #endif diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index ee0426c7df..8c5208678e 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -65,6 +65,7 @@  #include "llvovolume.h"  #include "lluictrlfactory.h"  #include "llpluginclassmedia.h" +#include "llviewertexturelist.h"  //  // Methods @@ -406,14 +407,40 @@ void LLPanelFace::getState()  			LLUUID id;  			struct f1 : public LLSelectedTEGetFunctor<LLUUID>  			{ -				LLUUID get(LLViewerObject* object, S32 te) +				LLUUID get(LLViewerObject* object, S32 te_index)  				{ -					LLViewerTexture* image = object->getTEImage(te); -					return image ? image->getID() : LLUUID::null; +					LLUUID id; +					 +					LLViewerTexture* image = object->getTEImage(te_index); +					if (image) id = image->getID(); +					 +					if (!id.isNull() && LLViewerMedia::textureHasMedia(id)) +					{ +						LLTextureEntry *te = object->getTE(te_index); +						if (te) +						{ +							LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID()) : NULL ; +							if(!tex) +							{ +								tex = LLViewerFetchedTexture::sDefaultImagep; +							} +							if (tex) +							{ +								id = tex->getID(); +							} +						} +					} +					return id;  				}  			} func;  			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, id ); +			if(LLViewerMedia::textureHasMedia(id)) +			{ +				childSetEnabled("textbox autofix",editable); +				childSetEnabled("button align",editable); +			} +			  			if (identical)  			{  				// All selected have the same texture @@ -444,13 +471,6 @@ void LLPanelFace::getState()  					}  				}  			} - -			if(LLViewerMedia::textureHasMedia(id)) -			{ -				childSetEnabled("textbox autofix",editable); -				childSetEnabled("button align",editable); -			} -  		} diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp index 920fca66f2..6a4c909759 100644 --- a/indra/newview/llpanellandaudio.cpp +++ b/indra/newview/llpanellandaudio.cpp @@ -37,6 +37,7 @@  // viewer includes  #include "llmimetypes.h"  #include "llviewerparcelmgr.h" +#include "llviewerregion.h"  #include "lluictrlfactory.h"  // library includes @@ -83,8 +84,14 @@ BOOL LLPanelLandAudio::postBuild()  	mCheckSoundLocal = getChild<LLCheckBoxCtrl>("check sound local");  	childSetCommitCallback("check sound local", onCommitAny, this); -	mRadioVoiceChat = getChild<LLRadioGroup>("parcel_voice_channel"); -	childSetCommitCallback("parcel_voice_channel", onCommitAny, this); +	mCheckParcelEnableVoice = getChild<LLCheckBoxCtrl>("parcel_enable_voice_channel"); +	childSetCommitCallback("parcel_enable_voice_channel", onCommitAny, this); + +	// This one is always disabled so no need for a commit callback +	mCheckEstateDisabledVoice = getChild<LLCheckBoxCtrl>("parcel_enable_voice_channel_is_estate_disabled"); + +	mCheckParcelVoiceLocal = getChild<LLCheckBoxCtrl>("parcel_enable_voice_channel_local"); +	childSetCommitCallback("parcel_enable_voice_channel_local", onCommitAny, this);  	mMusicURLEdit = getChild<LLLineEditor>("music_url");  	childSetCommitCallback("music_url", onCommitAny, this); @@ -118,19 +125,33 @@ void LLPanelLandAudio::refresh()  		mMusicUrlCheck->set( parcel->getObscureMusic() );  		mMusicUrlCheck->setEnabled( can_change_media ); -		if(parcel->getParcelFlagAllowVoice()) +		bool allow_voice = parcel->getParcelFlagAllowVoice(); + +		LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); +		if (region && region->isVoiceEnabled())  		{ -			if(parcel->getParcelFlagUseEstateVoiceChannel()) -				mRadioVoiceChat->setSelectedIndex(kRadioVoiceChatEstate); -			else -				mRadioVoiceChat->setSelectedIndex(kRadioVoiceChatPrivate); +			mCheckEstateDisabledVoice->setVisible(false); + +			mCheckParcelEnableVoice->setVisible(true); +			mCheckParcelEnableVoice->setEnabled( can_change_media ); +			mCheckParcelEnableVoice->set(allow_voice); + +			mCheckParcelVoiceLocal->setEnabled( can_change_media && allow_voice );  		}  		else  		{ -			mRadioVoiceChat->setSelectedIndex(kRadioVoiceChatDisable); +			// Voice disabled at estate level, overrides parcel settings +			// Replace the parcel voice checkbox with a disabled one +			// labelled with an explanatory message +			mCheckEstateDisabledVoice->setVisible(true); + +			mCheckParcelEnableVoice->setVisible(false); +			mCheckParcelEnableVoice->setEnabled(false); +			mCheckParcelVoiceLocal->setEnabled(false);  		} -		mRadioVoiceChat->setEnabled( can_change_media ); +		mCheckParcelEnableVoice->set(allow_voice); +		mCheckParcelVoiceLocal->set(!parcel->getParcelFlagUseEstateVoiceChannel());  		mMusicURLEdit->setText(parcel->getMusicURL());  		mMusicURLEdit->setEnabled( can_change_media ); @@ -149,30 +170,11 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)  	// Extract data from UI  	BOOL sound_local		= self->mCheckSoundLocal->get(); -	int voice_setting		= self->mRadioVoiceChat->getSelectedIndex();  	std::string music_url	= self->mMusicURLEdit->getText();  	U8 obscure_music		= self->mMusicUrlCheck->get(); - -	BOOL voice_enabled; -	BOOL voice_estate_chan; - -	switch(voice_setting) -	{ -		default: -		case kRadioVoiceChatEstate: -			voice_enabled = TRUE; -			voice_estate_chan = TRUE; -		break; -		case kRadioVoiceChatPrivate: -			voice_enabled = TRUE; -			voice_estate_chan = FALSE; -		break; -		case kRadioVoiceChatDisable: -			voice_enabled = FALSE; -			voice_estate_chan = FALSE; -		break; -	} +	BOOL voice_enabled = self->mCheckParcelEnableVoice->get(); +	BOOL voice_estate_chan = !self->mCheckParcelVoiceLocal->get();  	// Remove leading/trailing whitespace (common when copying/pasting)  	LLStringUtil::trim(music_url); diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h index de5da95fa4..19766a40b6 100644 --- a/indra/newview/llpanellandaudio.h +++ b/indra/newview/llpanellandaudio.h @@ -52,7 +52,9 @@ private:  private:  	LLCheckBoxCtrl* mCheckSoundLocal; -	LLRadioGroup*	mRadioVoiceChat; +	LLCheckBoxCtrl* mCheckParcelEnableVoice; +	LLCheckBoxCtrl* mCheckEstateDisabledVoice; +	LLCheckBoxCtrl* mCheckParcelVoiceLocal;	  	LLLineEditor*	mMusicURLEdit;  	LLCheckBoxCtrl* mMusicUrlCheck; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 4a7d784c3e..84c8b9d5f0 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -1140,6 +1140,10 @@ LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWea  BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable  ) // This sets mInfo and calls initialization functions  {  	//llassert(mInfo == NULL); // nyx says this is probably bogus but needs investigating +        if (mInfo != NULL) // above llassert(), but softened into a warning +        { +                llwarns << "BAD STUFF!  mInfo != NULL" << llendl; +        }  	mInfo = info;  	//mID = info->mID; // No ID diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 04d67fe750..d712446d83 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -752,6 +752,11 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  			new_priority = LLPluginClassMedia::PRIORITY_NORMAL;  			impl_count_interest_normal++;  		} +		else if(pimpl->isParcelMedia()) +		{ +			new_priority = LLPluginClassMedia::PRIORITY_NORMAL; +			impl_count_interest_normal++; +		}  		else  		{  			// Look at interest and CPU usage for instances that aren't in any of the above states. diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index e8b435fc8f..e87dbe5c07 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -212,22 +212,15 @@ void LLViewerParcelMedia::play(LLParcel* parcel)  		else  		{  			// Since the texture id is different, we need to generate a new impl -			LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL;  			// Delete the old one first so they don't fight over the texture.  			sMediaImpl = NULL; - -			sMediaImpl = LLViewerMedia::newMediaImpl( -				placeholder_texture_id, -				media_width,  -				media_height,  -				media_auto_scale, -				media_loop); -			sMediaImpl->setIsParcelMedia(true); -			sMediaImpl->navigateTo(media_url, mime_type, true); +			 +			// A new impl will be created below.  		}  	} -	else + +	if(!sMediaImpl)  	{  		LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index ad993bc056..3f42cba561 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1560,7 +1560,11 @@ F32 LLViewerFetchedTexture::calcDecodePriority()  void LLViewerFetchedTexture::setDecodePriority(F32 priority)  { -	llassert(!mInImageList); +	//llassert(!mInImageList); // firing a lot, figure out why +        if (mInImageList) // above llassert() softened to a warning +        { +                llwarns << "BAD STUFF!  mInImageList" << llendl; +        }  	mDecodePriority = priority;  } diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 6bb547373c..ee934ab9c5 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -502,7 +502,10 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)  	{  		llerrs << "LLViewerTextureList::addImageToList - Image already in list" << llendl;  	} -	llverify((mImageList.insert(image)).second == true); +	if ((mImageList.insert(image)).second != true) +	{ +		llwarns << "BAD STUFF!  (mImageList.insert(image)).second != true" << llendl; +	}  	image->setInImageList(TRUE) ;  } @@ -519,7 +522,10 @@ void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)  		}  		llerrs << "LLViewerTextureList::removeImageFromList - Image not in list" << llendl;  	} -	llverify(mImageList.erase(image) == 1); +	if (mImageList.erase(image) != 1) +        { +                llwarns << "BAD STUFF!  mImageList.erase(image) != 1" << llendl; +        }  	image->setInImageList(FALSE) ;  } diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index c58c1f00b9..61ca783d14 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1871,13 +1871,14 @@ Only large parcels can be listed in search.               layout="topleft"               left="110"               name="parcel_enable_voice_channel_is_estate_disabled" +             top_delta="0"               width="300" />              <check_box               height="16"               label="Restrict Voice to this parcel"               layout="topleft"               left="110" -             name="parcel_enable_voice_channel_parcel" +             name="parcel_enable_voice_channel_local"               width="300" />          </panel>          <panel | 
