diff options
| -rw-r--r-- | indra/newview/lloutfitslist.cpp | 33 | ||||
| -rw-r--r-- | indra/newview/lloutfitslist.h | 2 | 
2 files changed, 21 insertions, 14 deletions
| diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index ef38edfe3d..1fa1750933 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -798,7 +798,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. @@ -818,6 +818,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(); @@ -913,24 +920,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(); diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index 8975ac09d1..70ce7d3412 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -110,6 +110,7 @@ public:      virtual bool getHasExpandableFolders() = 0;  protected: +    void observerCallback(const LLUUID& category_id);      virtual LLOutfitListGearMenuBase* createGearMenu() = 0;      virtual void onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) = 0;      virtual void onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid) = 0; @@ -128,6 +129,7 @@ protected:          uuid_vec_t::const_iterator	AddedIterator;          uuid_vec_t::const_iterator	RemovedIterator;      } mRefreshListState; +    std::set<LLUUID>                mChangedItems;      bool                            mIsInitialized;      LLInventoryCategoriesObserver* 	mCategoriesObserver; | 
