summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelcontents.cpp
diff options
context:
space:
mode:
authorMaxim Nikolenko <maximnproductengine@lindenlab.com>2024-12-19 17:06:34 +0200
committerGitHub <noreply@github.com>2024-12-19 17:06:34 +0200
commitc88a7d1d274b090f5ca7484a8b1f3ccc36aa1980 (patch)
treea689388abef228fcd57d3ebd3af8b7fe92cc5b1b /indra/newview/llpanelcontents.cpp
parent8ed31a73d3e92517ffec04ca61c12ec6a2e81742 (diff)
#3302 fix crash on changing filter string when content is loading or there is no object selected
Diffstat (limited to 'indra/newview/llpanelcontents.cpp')
-rw-r--r--indra/newview/llpanelcontents.cpp55
1 files changed, 35 insertions, 20 deletions
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index dbf56c2b6d..2624ef1207 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -139,32 +139,47 @@ void LLPanelContents::getState(LLViewerObject *objectp )
void LLPanelContents::onFilterEdit()
{
const std::string& filter_substring = mFilterEditor->getText();
- if (filter_substring.empty())
+ if (!mPanelInventoryObject->hasInventory())
{
- if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
- {
- // The current filter and the new filter are empty, nothing to do
- return;
- }
-
- mSavedFolderState.setApply(true);
- mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(mSavedFolderState);
-
- // Add a folder with the current item to the list of previously opened folders
- LLOpenFoldersWithSelection opener;
- mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(opener);
- mPanelInventoryObject->getRootFolder()->scrollToShowSelection();
+ mDirtyFilter = true;
}
- else if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ else
{
- // The first letter in search term, save existing folder open state
- if (!mPanelInventoryObject->getFilter().isNotDefault())
+ if (filter_substring.empty())
{
- mSavedFolderState.setApply(false);
- mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(mSavedFolderState);
+ if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ {
+ // The current filter and the new filter are empty, nothing to do
+ return;
+ }
+
+ if (mDirtyFilter && !mSavedFolderState.hasOpenFolders())
+ {
+ mPanelInventoryObject->getRootFolder()->setOpenArrangeRecursively(true, LLFolderViewFolder::ERecurseType::RECURSE_DOWN);
+ }
+ else
+ {
+ mSavedFolderState.setApply(true);
+ mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(mSavedFolderState);
+ }
+ mDirtyFilter = false;
+
+ // Add a folder with the current item to the list of previously opened folders
+ LLOpenFoldersWithSelection opener;
+ mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(opener);
+ mPanelInventoryObject->getRootFolder()->scrollToShowSelection();
+ }
+ else if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ {
+ // The first letter in search term, save existing folder open state
+ if (!mPanelInventoryObject->getFilter().isNotDefault())
+ {
+ mSavedFolderState.setApply(false);
+ mPanelInventoryObject->getRootFolder()->applyFunctorRecursively(mSavedFolderState);
+ mDirtyFilter = false;
+ }
}
}
-
mPanelInventoryObject->getFilter().setFilterSubString(filter_substring);
}