diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2024-04-02 00:38:51 +0300 | 
|---|---|---|
| committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2025-03-11 01:41:05 +0200 | 
| commit | d8f3c242d4ece0c38269682cf65a05f955579eeb (patch) | |
| tree | f79f6f00b5de55f067e208bdd8117ef55b2fb68e | |
| parent | f2042fe9d8f4b6d939ace4009e959962e91c967e (diff) | |
viewer#1104 Crash at populateFoldersList
Ensure folder creation callbacks remain alive
# Conflicts:
#	indra/newview/llfloatercreatelandmark.cpp
#	indra/newview/llfloatercreatelandmark.h
| -rw-r--r-- | indra/newview/llfloatercreatelandmark.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llfloatercreatelandmark.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.h | 5 | 
4 files changed, 24 insertions, 6 deletions
| diff --git a/indra/newview/llfloatercreatelandmark.cpp b/indra/newview/llfloatercreatelandmark.cpp index 864a1f0767..5d525407fd 100644 --- a/indra/newview/llfloatercreatelandmark.cpp +++ b/indra/newview/llfloatercreatelandmark.cpp @@ -31,6 +31,7 @@  #include "llagent.h"  #include "llagentui.h"  #include "llcombobox.h" +#include "llfloaterreg.h"  #include "llinventoryfunctions.h"  #include "llinventoryobserver.h"  #include "lllandmarkactions.h" @@ -296,7 +297,7 @@ void LLFloaterCreateLandmark::onCreateFolderClicked()  void LLFloaterCreateLandmark::folderCreatedCallback(LLUUID folder_id)  { -    populateFoldersList(folder_id); +	populateFoldersList(folder_id);  }  void LLFloaterCreateLandmark::onSaveClicked() diff --git a/indra/newview/llfloatercreatelandmark.h b/indra/newview/llfloatercreatelandmark.h index fa6d001b8e..e3a258efe9 100644 --- a/indra/newview/llfloatercreatelandmark.h +++ b/indra/newview/llfloatercreatelandmark.h @@ -62,7 +62,7 @@ private:      void onSaveClicked();      void onCancelClicked(); -    void folderCreatedCallback(LLUUID folder_id); +    static void folderCreatedCallback(LLUUID folder_id);      LLComboBox*     mFolderCombo;      LLLineEditor*   mLandmarkTitleEditor; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e7584018a8..6cb04328ed 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -5315,7 +5315,7 @@ void LLFolderBridge::dropToMyOutfits(LLInventoryCategory* inv_cat, LLPointer<LLI      // Note: creation will take time, so passing folder id to callback is slightly unreliable,      // but so is collecting and passing descendants' ids -    inventory_func_type func = boost::bind(&LLFolderBridge::outfitFolderCreatedCallback, this, inv_cat->getUUID(), _1, cb); +    inventory_func_type func = boost::bind(outfitFolderCreatedCallback, inv_cat->getUUID(), _1, cb, mInventoryPanel);      gInventory.createNewCategory(dest_id,                                   LLFolderType::FT_OUTFIT,                                   inv_cat->getName(), @@ -5323,11 +5323,25 @@ void LLFolderBridge::dropToMyOutfits(LLInventoryCategory* inv_cat, LLPointer<LLI                                   inv_cat->getThumbnailUUID());  } -void LLFolderBridge::outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id, LLPointer<LLInventoryCallback> cb) +void LLFolderBridge::outfitFolderCreatedCallback(LLUUID cat_source_id, +                                                 LLUUID cat_dest_id, +                                                 LLPointer<LLInventoryCallback> cb, +                                                 LLHandle<LLInventoryPanel> inventory_panel)  {      LLInventoryModel::cat_array_t* categories;      LLInventoryModel::item_array_t* items; -    getInventoryModel()->getDirectDescendentsOf(cat_source_id, categories, items); + +    LLInventoryPanel* panel = inventory_panel.get(); +    if (!panel) +    { +        return; +    } +    LLInventoryModel*  model = panel->getModel(); +    if (!model) +    { +        return; +    } +    model->getDirectDescendentsOf(cat_source_id, categories, items);      LLInventoryObject::const_object_list_t link_array; diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 746b79ce87..3e7f74384b 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -378,7 +378,10 @@ public:      static void staticFolderOptionsMenu();  protected: -    void outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id, LLPointer<LLInventoryCallback> cb); +    static void outfitFolderCreatedCallback(LLUUID cat_source_id, +                                            LLUUID cat_dest_id, +                                            LLPointer<LLInventoryCallback> cb, +                                            LLHandle<LLInventoryPanel> inventory_panel);      void callback_pasteFromClipboard(const LLSD& notification, const LLSD& response);      void perform_pasteFromClipboard();      void gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level); | 
