MAINT-4218 FIXED Adding clothing from inventory closes THAT clothing folder and hides THAT folder
parent
c64544afe9
commit
a14ba78dbb
|
|
@ -258,20 +258,19 @@ BOOL LLFolderViewItem::passedFilter(S32 filter_generation)
|
|||
|
||||
BOOL LLFolderViewItem::isPotentiallyVisible(S32 filter_generation)
|
||||
{
|
||||
// Item should be visible if:
|
||||
// 1. item passed current filter
|
||||
// 2. item was updated (gen < 0) but has descendants that passed filter
|
||||
// 3. item was recently updated and was visible before update
|
||||
|
||||
if (filter_generation < 0)
|
||||
{
|
||||
filter_generation = getFolderViewModel()->getFilter().getFirstSuccessGeneration();
|
||||
}
|
||||
LLFolderViewModelItem* model = getViewModelItem();
|
||||
if (model->getLastFilterGeneration() < 0 && !getFolderViewModel()->getFilter().isModified())
|
||||
BOOL visible = model->passedFilter(filter_generation);
|
||||
if (model->getMarkedDirtyGeneration() >= filter_generation)
|
||||
{
|
||||
return model->descendantsPassedFilter(filter_generation) || getVisible();
|
||||
}
|
||||
else
|
||||
{
|
||||
return model->passedFilter(filter_generation);
|
||||
// unsure visibility state
|
||||
// retaining previous visibility until item is updated or filter generation changes
|
||||
visible |= getVisible();
|
||||
}
|
||||
return visible;
|
||||
}
|
||||
|
||||
void LLFolderViewItem::refresh()
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ public:
|
|||
virtual std::string::size_type getFilterStringSize() = 0;
|
||||
|
||||
virtual S32 getLastFilterGeneration() const = 0;
|
||||
virtual S32 getMarkedDirtyGeneration() const = 0;
|
||||
|
||||
virtual bool hasChildren() const = 0;
|
||||
virtual void addChild(LLFolderViewModelItem* child) = 0;
|
||||
|
|
@ -230,6 +231,7 @@ public:
|
|||
mFolderViewItem(NULL),
|
||||
mLastFilterGeneration(-1),
|
||||
mLastFolderFilterGeneration(-1),
|
||||
mMarkedDirtyGeneration(-1),
|
||||
mMostFilteredDescendantGeneration(-1),
|
||||
mParent(NULL),
|
||||
mRootViewModel(root_view_model)
|
||||
|
|
@ -243,8 +245,13 @@ public:
|
|||
|
||||
S32 getLastFilterGeneration() const { return mLastFilterGeneration; }
|
||||
S32 getLastFolderFilterGeneration() const { return mLastFolderFilterGeneration; }
|
||||
S32 getMarkedDirtyGeneration() const { return mMarkedDirtyGeneration; }
|
||||
void dirtyFilter()
|
||||
{
|
||||
if(mMarkedDirtyGeneration < 0)
|
||||
{
|
||||
mMarkedDirtyGeneration = mLastFilterGeneration;
|
||||
}
|
||||
mLastFilterGeneration = -1;
|
||||
mLastFolderFilterGeneration = -1;
|
||||
|
||||
|
|
@ -303,6 +310,7 @@ public:
|
|||
mLastFilterGeneration = filter_generation;
|
||||
mStringMatchOffsetFilter = string_offset;
|
||||
mStringFilterSize = string_size;
|
||||
mMarkedDirtyGeneration = -1;
|
||||
}
|
||||
|
||||
void setPassedFolderFilter(bool passed, S32 filter_generation)
|
||||
|
|
@ -351,7 +359,8 @@ protected:
|
|||
|
||||
S32 mLastFilterGeneration,
|
||||
mLastFolderFilterGeneration,
|
||||
mMostFilteredDescendantGeneration;
|
||||
mMostFilteredDescendantGeneration,
|
||||
mMarkedDirtyGeneration;
|
||||
|
||||
child_list_t mChildren;
|
||||
LLFolderViewModelItem* mParent;
|
||||
|
|
|
|||
|
|
@ -129,13 +129,18 @@ void LLFolderViewModelItemInventory::requestSort()
|
|||
|
||||
void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size)
|
||||
{
|
||||
bool generation_skip = mMarkedDirtyGeneration >= 0
|
||||
&& mPrevPassedAllFilters
|
||||
&& mMarkedDirtyGeneration < mRootViewModel.getFilter().getFirstSuccessGeneration();
|
||||
LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size);
|
||||
bool before = mPrevPassedAllFilters;
|
||||
mPrevPassedAllFilters = passedFilter(filter_generation);
|
||||
|
||||
if (before != mPrevPassedAllFilters)
|
||||
if (before != mPrevPassedAllFilters || generation_skip)
|
||||
{
|
||||
// Need to rearrange the folder if the filtered state of the item changed
|
||||
// Need to rearrange the folder if the filtered state of the item changed,
|
||||
// previously passed item skipped filter generation changes while being dirty
|
||||
// or previously passed not yet filtered item was marked dirty
|
||||
LLFolderViewFolder* parent_folder = mFolderViewItem->getParentFolder();
|
||||
if (parent_folder)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue