diff options
| author | Callum Prentice <callum@lindenlab.com> | 2025-08-22 17:12:03 -0700 | 
|---|---|---|
| committer | Callum Prentice <callum@lindenlab.com> | 2025-08-22 17:12:03 -0700 | 
| commit | e935a8aebca4ae014b5f6b438612ac5674678fe6 (patch) | |
| tree | 531498d040a62c01d444fe91eb99afb091c7fff4 /indra/newview/llinventoryfilter.cpp | |
| parent | bebd1b208e1b342fabf59844851124a91513e83b (diff) | |
| parent | cefee59b0e5fff683a50fe61633a9c14493d7145 (diff) | |
Merge branch 'develop' into callum/viewer-cef-2025-08
Diffstat (limited to 'indra/newview/llinventoryfilter.cpp')
| -rw-r--r-- | indra/newview/llinventoryfilter.cpp | 79 | 
1 files changed, 79 insertions, 0 deletions
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 01f2c6c525..99c2d6e410 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -64,6 +64,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)      mFilterUUID(p.uuid),      mFilterLinks(p.links),      mFilterThumbnails(p.thumbnails), +    mFilterFavorites(p.favorites),      mSearchVisibility(p.search_visibility)  {  } @@ -159,6 +160,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)      passed = passed && checkAgainstCreator(listener);      passed = passed && checkAgainstSearchVisibility(listener); +    passed = passed && checkAgainstFilterFavorites(listener->getUUID());      passed = passed && checkAgainstFilterThumbnails(listener->getUUID());      return passed; @@ -221,6 +223,19 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const          return false;      } +    const LLViewerInventoryCategory* cat = gInventory.getCategory(folder_id); +    if (cat && cat->getIsFavorite()) +    { +        if (mFilterOps.mFilterFavorites == FILTER_ONLY_FAVORITES) +        { +            return true; +        } +        if (mFilterOps.mFilterFavorites == FILTER_EXCLUDE_FAVORITES) +        { +            return false; +        } +    } +      // Marketplace folder filtering      const U32 filterTypes = mFilterOps.mFilterTypes;      const U32 marketplace_filter = FILTERTYPE_MARKETPLACE_ACTIVE | FILTERTYPE_MARKETPLACE_INACTIVE | @@ -273,6 +288,16 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const          }      } +    if (filterTypes & FILTERTYPE_NO_TRASH_ITEMS) +    { +        const LLUUID trash_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); +        // If not a descendant of the marketplace listings root, then the nesting depth is -1 by definition +        if (gInventory.isObjectDescendentOf(folder_id, trash_uuid)) +        { +            return false; +        } +    } +      // show folder links      LLViewerInventoryItem* item = gInventory.getItem(folder_id);      if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER) @@ -611,6 +636,24 @@ bool LLInventoryFilter::checkAgainstFilterThumbnails(const LLUUID& object_id) co      return true;  } +bool LLInventoryFilter::checkAgainstFilterFavorites(const LLUUID& object_id) const +{ +    const LLInventoryObject* object = gInventory.getObject(object_id); +    if (!object) return true; + + +    if (mFilterOps.mFilterFavorites != FILTER_INCLUDE_FAVORITES) +    { +        bool is_favorite = get_is_favorite(object); +        if (is_favorite && (mFilterOps.mFilterFavorites == FILTER_EXCLUDE_FAVORITES)) +            return false; +        if (!is_favorite && (mFilterOps.mFilterFavorites == FILTER_ONLY_FAVORITES)) +            return false; +    } + +    return true; +} +  bool LLInventoryFilter::checkAgainstCreator(const LLFolderViewModelItemInventory* listener) const  {      if (!listener) @@ -811,6 +854,32 @@ void LLInventoryFilter::setFilterThumbnails(U64 filter_thumbnails)      mFilterOps.mFilterThumbnails = filter_thumbnails;  } +void LLInventoryFilter::setFilterFavorites(U64 filter_favorites) +{ +    if (mFilterOps.mFilterFavorites != filter_favorites) +    { +        if (mFilterOps.mFilterFavorites == FILTER_EXCLUDE_FAVORITES +            && filter_favorites == FILTER_ONLY_FAVORITES) +        { +            setModified(FILTER_RESTART); +        } +        else if (mFilterOps.mFilterFavorites == FILTER_ONLY_FAVORITES +            && filter_favorites == FILTER_EXCLUDE_FAVORITES) +        { +            setModified(FILTER_RESTART); +        } +        else if (mFilterOps.mFilterFavorites == FILTER_INCLUDE_FAVORITES) +        { +            setModified(FILTER_MORE_RESTRICTIVE); +        } +        else +        { +            setModified(FILTER_LESS_RESTRICTIVE); +        } +    } +    mFilterOps.mFilterFavorites = filter_favorites; +} +  void LLInventoryFilter::setFilterEmptySystemFolders()  {      mFilterOps.mFilterTypes |= FILTERTYPE_EMPTYFOLDERS; @@ -923,6 +992,11 @@ void LLInventoryFilter::toggleSearchVisibilityLibrary()      }  } +void LLInventoryFilter::setFilterNoTrashFolder() +{ +    mFilterOps.mFilterTypes |= FILTERTYPE_NO_TRASH_ITEMS; +} +  void LLInventoryFilter::setFilterNoMarketplaceFolder()  {      mFilterOps.mFilterTypes |= FILTERTYPE_NO_MARKETPLACE_ITEMS; @@ -1615,6 +1689,11 @@ U64 LLInventoryFilter::getFilterThumbnails() const      return mFilterOps.mFilterThumbnails;  } +U64 LLInventoryFilter::getFilterFavorites() const +{ +    return mFilterOps.mFilterFavorites; +} +  bool LLInventoryFilter::hasFilterString() const  {      return mFilterSubString.size() > 0;  | 
