diff options
author | andreykproductengine <akleshchev@productengine.com> | 2017-04-05 19:34:04 +0300 |
---|---|---|
committer | andreykproductengine <akleshchev@productengine.com> | 2017-04-05 19:34:04 +0300 |
commit | 306cec78aa3f58dfc264d794435aebd4c1b7d63f (patch) | |
tree | 67461786194213843b2bba9d800963959bb86ba9 /indra/newview/llappearancemgr.cpp | |
parent | 26809498db128f2f69da3d04ae2b736f78f6e13a (diff) |
MAINT-7249 Fixing obsolete suffix for wearables that are no longer worn
Diffstat (limited to 'indra/newview/llappearancemgr.cpp')
-rw-r--r-- | indra/newview/llappearancemgr.cpp | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index feb981217d..c928cf0601 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2917,11 +2917,32 @@ void LLAppearanceMgr::removeAllAttachmentsFromAvatar() removeItemsFromAvatar(ids_to_remove); } -void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointer<LLInventoryCallback> cb) +class LLUpdateOnCOFLinkRemove : public LLInventoryCallback { - gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); +public: + LLUpdateOnCOFLinkRemove(const LLUUID& remove_item_id, LLPointer<LLInventoryCallback> cb = NULL): + mItemID(remove_item_id), + mCB(cb) + { + } - LLInventoryModel::cat_array_t cat_array; + /* virtual */ void fire(const LLUUID& item_id) + { + // just removed cof link, "(wear)" suffix depends on presence of link, so update label + gInventory.addChangedMask(LLInventoryObserver::LABEL, mItemID); + if (mCB.notNull()) + { + mCB->fire(item_id); + } + } + +private: + LLUUID mItemID; + LLPointer<LLInventoryCallback> mCB; +}; + +void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointer<LLInventoryCallback> cb) +{ LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; gInventory.collectDescendents(LLAppearanceMgr::getCOF(), cat_array, @@ -2932,12 +2953,20 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointer<LLInve const LLInventoryItem* item = item_array.at(i).get(); if (item->getIsLinkType() && item->getLinkedUUID() == item_id) { - bool immediate_delete = false; if (item->getType() == LLAssetType::AT_OBJECT) { - immediate_delete = true; + // Immediate delete + remove_inventory_item(item->getUUID(), cb, true); + gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + } + else + { + // Delayed delete + // Pointless to update item_id label here since link still exists and first notifyObservers + // call will restore (wear) suffix, mark for update after deletion + LLPointer<LLUpdateOnCOFLinkRemove> cb_label = new LLUpdateOnCOFLinkRemove(item_id, cb); + remove_inventory_item(item->getUUID(), cb_label, false); } - remove_inventory_item(item->getUUID(), cb, immediate_delete); } } } |