MAINT-4218 FIXED Adding clothing from inventory closes THAT clothing folder and hides THAT folder

master
andreykproductengine 2014-08-12 19:45:53 +03:00
parent c64544afe9
commit a14ba78dbb
3 changed files with 27 additions and 14 deletions

View File

@ -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()

View File

@ -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;

View File

@ -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)
{