diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-08-04 17:21:33 -0400 | 
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-08-04 17:21:33 -0400 | 
| commit | e6d5cc3bd1d678eaad7869a70b75d92772db3fc7 (patch) | |
| tree | de872df91f83b5d062d6b148f23393038d803ba1 | |
| parent | cf58852a5eac7c99c0c2770b44e4fe64d2cc8aee (diff) | |
EXT-8283 FIX, EXT-8360 FIX - original fixes got broken, presumably during some merge
| -rw-r--r-- | indra/newview/llcofwearables.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llinventoryobserver.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llinventoryobserver.h | 10 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 6 | 
4 files changed, 38 insertions, 15 deletions
| diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index eb950bf6c1..acb513106d 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -396,7 +396,11 @@ void LLCOFWearables::refresh()  		return;  	} -	if (mCOFVersion == catp->getVersion()) return; +	// BAP - this check has to be removed because an item name change does not +	// change cat version - ie, checking version is not a complete way +	// of finding out whether anything has changed in this category. +	//if (mCOFVersion == catp->getVersion()) return; +  	mCOFVersion = catp->getVersion();  	typedef std::vector<LLSD> values_vector_t; diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 5416f01033..54b8f3a8a4 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -708,7 +708,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask)  		const S32 current_num_known_descendents = cats->count() + items->count(); -		LLCategoryData cat_data = (*iter).second; +		LLCategoryData& cat_data = (*iter).second;  		bool cat_changed = false; @@ -722,11 +722,17 @@ void LLInventoryCategoriesObserver::changed(U32 mask)  		}  		// If any item names have changed, update the name hash  -		LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id); -		if (cat_data.mItemNameHash != item_name_hash) +		// Only need to check if (a) name hash has not previously been +		// computed, or (b) a name has changed. +		if (!cat_data.mIsNameHashInitialized || (mask & LLInventoryObserver::LABEL))  		{ -			cat_data.mItemNameHash = item_name_hash; -			cat_changed = true; +			LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id); +			if (cat_data.mItemNameHash != item_name_hash) +			{ +				cat_data.mIsNameHashInitialized = true; +				cat_data.mItemNameHash = item_name_hash; +				cat_changed = true; +			}  		}  		// If anything has changed above, fire the callback. @@ -773,7 +779,8 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t  	if (can_be_added)  	{ -		mCategoryMap.insert(category_map_value_t(cat_id, LLCategoryData(cb, version, current_num_known_descendents))); +		mCategoryMap.insert(category_map_value_t( +								cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents)));  	}  	return can_be_added; @@ -783,3 +790,15 @@ void LLInventoryCategoriesObserver::removeCategory(const LLUUID& cat_id)  {  	mCategoryMap.erase(cat_id);  } + +LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData( +	const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents) +	 +	: mCatID(cat_id) +	, mCallback(cb) +	, mVersion(version) +	, mDescendentsCount(num_descendents) +	, mIsNameHashInitialized(false) +{ +	mItemNameHash.finalize(); +} diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index ccd5fa5f4e..d535250970 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -295,18 +295,14 @@ public:  protected:  	struct LLCategoryData  	{ -		LLCategoryData(callback_t cb, S32 version, S32 num_descendents) -		: mCallback(cb) -		, mVersion(version) -		, mDescendentsCount(num_descendents) -		{ -			mItemNameHash.finalize(); -		} +		LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents);  		callback_t	mCallback;  		S32			mVersion;  		S32			mDescendentsCount;  		LLMD5		mItemNameHash; +		bool		mIsNameHashInitialized; +		LLUUID		mCatID;  	};  	typedef	std::map<LLUUID, LLCategoryData>	category_map_t; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index c12f1fbe99..07a66eaf10 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -1100,7 +1100,11 @@ void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list)  void LLPanelOutfitEdit::onCOFChanged()  {  	//the panel is only updated when is visible to a user -	if (!isInVisibleChain()) return; + +	// BAP - this check has to be removed because otherwise item name +	// changes made when the panel is not visible will not be +	// propagated to the panel. +	// if (!isInVisibleChain()) return;  	update();  } | 
