diff options
| author | Maxim Nikolenko <mnikolenko@productengine.com> | 2022-12-08 15:07:10 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-08 15:07:10 +0200 | 
| commit | 8496ae48dd4c5265f4d8007c394fbdf16640d8a2 (patch) | |
| tree | 2739d8b650afe2d27d3dbb1f53c6d50c752d8d8f | |
| parent | 823dbc880540a789c5768930e0dffafd7c4a0269 (diff) | |
SL-18807 FIXED Viewer crashes when trying to purge item using 'Pick: Select settings' floater
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.h | 2 | 
2 files changed, 8 insertions, 11 deletions
| diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 6b102c7500..0e3db51d2a 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1622,6 +1622,7 @@ void LLInventoryPanel::purgeSelectedItems()      if (inventory_selected.empty()) return;      LLSD args;      S32 count = inventory_selected.size(); +    std::vector<LLUUID> selected_items;      for (std::set<LLFolderViewItem*>::const_iterator it = inventory_selected.begin(), end_it = inventory_selected.end();          it != end_it;          ++it) @@ -1631,27 +1632,23 @@ void LLInventoryPanel::purgeSelectedItems()          LLInventoryModel::item_array_t items;          gInventory.collectDescendents(item_id, cats, items, LLInventoryModel::INCLUDE_TRASH);          count += items.size() + cats.size(); +        selected_items.push_back(item_id);      }      args["COUNT"] = count; -    LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), boost::bind(&LLInventoryPanel::callbackPurgeSelectedItems, this, _1, _2)); +    LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), boost::bind(callbackPurgeSelectedItems, _1, _2, selected_items));  } -void LLInventoryPanel::callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response) +// static +void LLInventoryPanel::callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response, const std::vector<LLUUID> inventory_selected)  { -    if (!mFolderRoot.get()) return; -      S32 option = LLNotificationsUtil::getSelectedOption(notification, response);      if (option == 0)      { -        const std::set<LLFolderViewItem*> inventory_selected = mFolderRoot.get()->getSelectionList();          if (inventory_selected.empty()) return; -        std::set<LLFolderViewItem*>::const_iterator it = inventory_selected.begin(); -        const std::set<LLFolderViewItem*>::const_iterator it_end = inventory_selected.end(); -        for (; it != it_end; ++it) +        for (auto it : inventory_selected)          { -            LLUUID item_id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID(); -            remove_inventory_object(item_id, NULL); +            remove_inventory_object(it, NULL);          }      }  } diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 552c61b915..2c782a5ea7 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -260,7 +260,7 @@ public:      // Clean up stuff when the folder root gets deleted      void clearFolderRoot(); -    void callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response); +    static void callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response, const std::vector<LLUUID> inventory_selected);  protected:  	void openStartFolderOrMyInventory(); // open the first level of inventory | 
