summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llcofwearables.cpp6
-rw-r--r--indra/newview/llinventoryobserver.cpp31
-rw-r--r--indra/newview/llinventoryobserver.h10
-rw-r--r--indra/newview/llpaneloutfitedit.cpp6
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();
}