#4518 Dupplicates can appear in favorites

if parent and child gets added back to back
master
Andrey Kleshchev 2025-08-18 22:15:51 +03:00 committed by Andrey Kleshchev
parent a9a2e7c633
commit b96c7ec6e6
1 changed files with 24 additions and 2 deletions

View File

@ -2298,6 +2298,7 @@ public:
void removeItemID(const LLUUID& id) override;
bool isInRootContent(const LLUUID& id, LLFolderViewItem* view_item) override;
bool hasPredecessorsInRootContent(const LLInventoryObject* model_item) const;
protected:
LLInventoryFavoritesItemsPanel(const Params&);
@ -2344,6 +2345,24 @@ bool LLInventoryFavoritesItemsPanel::isInRootContent(const LLUUID& id, LLFolderV
return found != mRootContentIDs.end();
}
bool LLInventoryFavoritesItemsPanel::hasPredecessorsInRootContent(const LLInventoryObject* obj) const
{
LLUUID parent_id = obj->getParentUUID();
while (parent_id.notNull())
{
if (mRootContentIDs.contains(parent_id))
{
return true;
}
LLViewerInventoryCategory* cat = mInventory->getCategory(parent_id);
if (cat)
{
parent_id = cat->getParentUUID();
}
}
return false;
}
void LLInventoryFavoritesItemsPanel::findAndInitRootContent(const LLUUID& id)
{
F64 curent_time = LLTimer::getTotalSeconds();
@ -2495,7 +2514,8 @@ void LLInventoryFavoritesItemsPanel::itemChanged(const LLUUID& id, U32 mask, con
}
LLFolderViewItem* folder_view_item = getItemByID(cat->getUUID());
if (!folder_view_item)
if (!folder_view_item
&& !hasPredecessorsInRootContent(model_item))
{
const LLUUID& parent_id = cat->getParentUUID();
mRootContentIDs.emplace(cat->getUUID());
@ -2507,7 +2527,9 @@ void LLInventoryFavoritesItemsPanel::itemChanged(const LLUUID& id, U32 mask, con
else
{
// New favorite item
if (model_item->getIsFavorite() && typedViewsFilter(id, model_item))
if (model_item->getIsFavorite()
&& typedViewsFilter(id, model_item)
&& !hasPredecessorsInRootContent(model_item))
{
const LLUUID& parent_id = model_item->getParentUUID();
mRootContentIDs.emplace(id);