diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-01-16 04:42:33 +0200 |
---|---|---|
committer | akleshchev <117672381+akleshchev@users.noreply.github.com> | 2023-01-16 20:42:20 +0200 |
commit | a1931d8cc4820eb4e20f1346fc7c3e0139c5863b (patch) | |
tree | d10c98834db22cfbbaa8f02c33edb128ee09daac /indra | |
parent | 484e3b62131c487b8faaa445cabccb7c82931ffe (diff) |
SL-18735 Using "Find original" in main inventory tab breaks inventory view
Fixes folders being invidible (missing arrange)
Fixes sroll to target not working reliably
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llcommon/llallocator_heap_profile.cpp | 1 | ||||
-rw-r--r-- | indra/llui/llfolderview.cpp | 30 | ||||
-rw-r--r-- | indra/llui/llfolderviewitem.h | 1 | ||||
-rw-r--r-- | indra/newview/lleventpoll.cpp | 5 | ||||
-rw-r--r-- | indra/newview/llfolderviewmodelinventory.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llstartup.cpp | 2 |
6 files changed, 32 insertions, 13 deletions
diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp index 6dd399e1e3..c6d9542b42 100644 --- a/indra/llcommon/llallocator_heap_profile.cpp +++ b/indra/llcommon/llallocator_heap_profile.cpp @@ -130,7 +130,6 @@ void LLAllocatorHeapProfile::parse(std::string const & prof_text) void LLAllocatorHeapProfile::dump(std::ostream & out) const { - lines_t::const_iterator i; for (const LLAllocatorHeapProfile::line& line : mLines) { out << line.mLiveCount << ": " << line.mLiveSize << '[' << line.mTotalCount << ": " << line.mTotalSize << "] @"; diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index ea2ca68e47..5391222b67 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1646,7 +1646,8 @@ void LLFolderView::update() // Clear the modified setting on the filter only if the filter finished after running the filter process // Note: if the filter count has timed out, that means the filter halted before completing the entire set of items - if (filter_object.isModified() && (!filter_object.isTimedOut())) + bool filter_modified = filter_object.isModified(); + if (filter_modified && (!filter_object.isTimedOut())) { filter_object.clearModified(); } @@ -1680,7 +1681,7 @@ void LLFolderView::update() BOOL filter_finished = mViewModel->contentsReady() && (getViewModelItem()->passedFilter() || ( getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration() - && !filter_object.isModified())); + && !filter_modified)); if (filter_finished || gFocusMgr.childHasKeyboardFocus(mParentPanel.get()) || gFocusMgr.childHasMouseCapture(mParentPanel.get())) @@ -1768,13 +1769,26 @@ void LLFolderView::update() if (mSelectedItems.size() && mNeedsScroll) { - scrollToShowItem(mSelectedItems.back(), constraint_rect); + LLFolderViewItem* scroll_to_item = mSelectedItems.back(); + scrollToShowItem(scroll_to_item, constraint_rect); // continue scrolling until animated layout change is done - if (filter_finished - && (!needsArrange() || !is_visible)) - { - mNeedsScroll = FALSE; - } + bool selected_filter_finished = true; + if (scroll_to_item && scroll_to_item->getViewModelItem()) + { + selected_filter_finished = scroll_to_item->getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration(); + } + if (filter_finished && selected_filter_finished) + { + bool needs_arrange = needsArrange(); + if (mParentFolder) + { + needs_arrange |= (bool)mParentFolder->needsArrange(); + } + if (!needs_arrange || !is_visible) + { + mNeedsScroll = FALSE; + } + } } if (mSignalSelectCallback) diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index ee20d048fd..a5157266c5 100644 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -335,7 +335,6 @@ protected: F32 mAutoOpenCountdown; S32 mLastArrangeGeneration; S32 mLastCalculatedWidth; - bool mNeedsSort; bool mIsFolderComplete; // indicates that some children were not loaded/added yet bool mAreChildrenInited; // indicates that no children were initialized diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp index 6f3f6e9166..26782e53f0 100644 --- a/indra/newview/lleventpoll.cpp +++ b/indra/newview/lleventpoll.cpp @@ -247,8 +247,9 @@ namespace Details errorCount = 0; if (!result.isMap() || - !result.get("events") || - !result.get("id")) + !result.has("events") || + !result["events"].isArray() || + !result.has("id")) { LL_WARNS("LLEventPollImpl") << " <" << counter << "> received event poll with no events or id key: " << result << LL_ENDL; continue; diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index b6d856e31b..241aa96bc8 100644 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -182,11 +182,15 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_gen bool generation_skip = mMarkedDirtyGeneration >= 0 && mPrevPassedAllFilters && mMarkedDirtyGeneration < mRootViewModel.getFilter().getFirstSuccessGeneration(); + S32 last_generation = mLastFilterGeneration; LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size); bool before = mPrevPassedAllFilters; mPrevPassedAllFilters = passedFilter(filter_generation); - if (before != mPrevPassedAllFilters || generation_skip) + if (before != mPrevPassedAllFilters // Change of state + || generation_skip // Was marked dirty + // Potential change from being in-progress and invisible to visible) + || (mPrevPassedAllFilters && last_generation < mRootViewModel.getFilter().getFirstRequiredGeneration())) { // Need to rearrange the folder if the filtered state of the item changed, // previously passed item skipped filter generation changes while being dirty diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 1dd5c5cbe5..10293a90c8 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -324,6 +324,8 @@ void set_flags_and_update_appearance() { LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true); LLAppearanceMgr::instance().updateAppearanceFromCOF(true, true, no_op); + + LLInventoryModelBackgroundFetch::instance().start(); } // Returns false to skip other idle processing. Should only return |