summaryrefslogtreecommitdiff
path: root/indra/newview/lloutfitslist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lloutfitslist.cpp')
-rw-r--r--indra/newview/lloutfitslist.cpp33
1 files changed, 19 insertions, 14 deletions
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index f4cd9b2647..0870211a8e 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -792,7 +792,7 @@ void LLOutfitListBase::onOpen(const LLSD& info)
// Start observing changes in "My Outfits" category.
mCategoriesObserver->addCategory(outfits,
- boost::bind(&LLOutfitListBase::refreshList, this, outfits));
+ boost::bind(&LLOutfitListBase::observerCallback, this, outfits));
//const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
// Start observing changes in Current Outfit category.
@@ -812,6 +812,13 @@ void LLOutfitListBase::onOpen(const LLSD& info)
}
}
+void LLOutfitListBase::observerCallback(const LLUUID& category_id)
+{
+ const LLInventoryModel::changed_items_t& changed_items = gInventory.getChangedIDs();
+ mChangedItems.insert(changed_items.begin(), changed_items.end());
+ refreshList(category_id);
+}
+
void LLOutfitListBase::refreshList(const LLUUID& category_id)
{
bool wasNull = mRefreshListState.CategoryUUID.isNull();
@@ -907,24 +914,22 @@ void LLOutfitListBase::onIdleRefreshList()
// Get changed items from inventory model and update outfit tabs
// which might have been renamed.
- const LLInventoryModel::changed_items_t& changed_items = gInventory.getChangedIDs();
- for (LLInventoryModel::changed_items_t::const_iterator items_iter = changed_items.begin();
- items_iter != changed_items.end();
- ++items_iter)
+ while (!mChangedItems.empty())
{
+ std::set<LLUUID>::const_iterator items_iter = mChangedItems.begin();
LLViewerInventoryCategory *cat = gInventory.getCategory(*items_iter);
- if (!cat)
+ mChangedItems.erase(items_iter);
+
+ // Links aren't supposed to be allowed here, check only cats
+ if (cat)
{
- LLInventoryObject* obj = gInventory.getObject(*items_iter);
- if (!obj || (obj->getType() != LLAssetType::AT_CATEGORY))
- {
- break;
- }
- cat = (LLViewerInventoryCategory*)obj;
+ std::string name = cat->getName();
+ updateChangedCategoryName(cat, name);
}
- std::string name = cat->getName();
- updateChangedCategoryName(cat, name);
+ curent_time = LLTimer::getTotalSeconds();
+ if (curent_time >= end_time)
+ return;
}
sortOutfits();