diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7cf01040755c6fac822ebe3e68fa7e4240e86a4b..1c5d7ae9b99797f5a08999e9885c4c0eeb257eaf 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -357,6 +357,16 @@ void LLFolderView::openFolder(const std::string& foldername) } } +void LLFolderView::openTopLevelFolders() +{ + for (folders_t::iterator iter = mFolders.begin(); + iter != mFolders.end();) + { + folders_t::iterator fit = iter++; + (*fit)->setOpen(TRUE); + } +} + void LLFolderView::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse) { // call base class to do proper recursion diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 4adf6c2fbf90ef38335d46eebc1f445a7d9dc0b0..d18ba385d82d6caf88e95f33e1bb966dd26a5b32 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -127,6 +127,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler // Close all folders in the view void closeAllFolders(); void openFolder(const std::string& foldername); + void openTopLevelFolders(); virtual void toggleOpen() {}; virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index cbbd433c1dbf4cc4623f9a112bb49182bf0eb865..4f7f0a79f64a919d7ce60088cc24fdc68c5cb7b4 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -192,6 +192,7 @@ class LLInventoryPanel : public LLPanel public: BOOL getIsViewsInitialized() const { return mViewsInitialized; } const LLUUID& getStartFolderID() const { return mStartFolderID; } + const std::string& getStartFolderString() { return mStartFolderString; } protected: // Builds the UI. Call this once the inventory is usable. void initializeViews(); diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 975219458f01dce8804170acac014b400116ca2f..c85fab20921006a01ab0854f84034fcfe2ae38e0 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -389,10 +389,6 @@ void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_lis } root_folder->setParentLandmarksPanel(this); - - // save initial folder state to avoid incorrect work while switching between Landmarks & Teleport History tabs - // See EXT-1609. - inventory_list->saveFolderState(); } void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list) @@ -995,12 +991,13 @@ void LLLandmarksPanel::doCreatePick(LLLandmark* landmark) ////////////////////////////////////////////////////////////////////////// static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string) { + // Open the immediate children of the root folder, since those + // are invisible in the UI and thus must always be open. + inventory_list->getRootFolder()->openTopLevelFolders(); + if (string == "") { inventory_list->setFilterSubString(LLStringUtil::null); - - // re-open folders that were initially open - inventory_list->restoreFolderState(); } if (inventory_list->getFilterSubString().empty() && string.empty()) @@ -1009,13 +1006,8 @@ static void filter_list(LLInventorySubTreePanel* inventory_list, const std::stri return; } - // save current folder open state if no filter currently applied - if (inventory_list->getRootFolder()->getFilterSubString().empty()) - { - inventory_list->saveFolderState(); - } - - // set new filter string + // Set new filter string inventory_list->setFilterSubString(string); + } // EOF