diff options
| -rw-r--r-- | indra/llui/llfolderview.h | 1 | ||||
| -rw-r--r-- | indra/newview/llpanelcontents.cpp | 55 | ||||
| -rw-r--r-- | indra/newview/llpanelcontents.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelobjectinventory.h | 2 | 
4 files changed, 40 insertions, 20 deletions
diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h index 62ef2a0626..82637e33ea 100644 --- a/indra/llui/llfolderview.h +++ b/indra/llui/llfolderview.h @@ -414,6 +414,7 @@ public:      virtual void doItem(LLFolderViewItem* item) {}      void setApply(bool apply);      void clearOpenFolders() { mOpenFolders.clear(); } +    bool hasOpenFolders() { return !mOpenFolders.empty(); }  protected:      std::set<LLUUID> mOpenFolders;      bool mApply; 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);  } diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h index bb6308e8b8..6e02b17bab 100644 --- a/indra/newview/llpanelcontents.h +++ b/indra/newview/llpanelcontents.h @@ -70,6 +70,8 @@ protected:      void getState(LLViewerObject *object);      void onFilterEdit(); +    bool mDirtyFilter { false }; +  public:      class LLFilterEditor* mFilterEditor;      LLSaveFolderState mSavedFolderState; diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h index abb48dbeed..154639e4bb 100644 --- a/indra/newview/llpanelobjectinventory.h +++ b/indra/newview/llpanelobjectinventory.h @@ -85,6 +85,8 @@ public:      static void idle(void* user_data); +    bool hasInventory(){ return mHaveInventory; }; +  protected:      void reset();      /*virtual*/ void inventoryChanged(LLViewerObject* object,  | 
