Merge branch 'release/2024.12-ForeverFPS' of https://github.com/secondlife/viewer
commit
eed9b396bb
|
|
@ -300,7 +300,8 @@ EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByImageName(std::strin
|
|||
|
||||
LLWearableType::EType LLAvatarAppearanceDictionary::getTEWearableType(ETextureIndex index ) const
|
||||
{
|
||||
return getTexture(index)->mWearableType;
|
||||
auto* tex = getTexture(index);
|
||||
return tex ? tex->mWearableType : LLWearableType::WT_INVALID;
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -661,7 +661,7 @@ void LLWearable::setVisualParamWeight(S32 param_index, F32 value, bool upload_ba
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "LLWearable::setVisualParam passed invalid parameter index: " << param_index << " for wearable type: " << this->getName() << LL_ENDL;
|
||||
LL_WARNS() << "LLWearable::setVisualParam passed invalid parameter index: " << param_index << " for wearable type: " << this->getName() << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -674,7 +674,7 @@ F32 LLWearable::getVisualParamWeight(S32 param_index) const
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "LLWerable::getVisualParam passed invalid parameter index: " << param_index << " for wearable type: " << this->getName() << LL_ENDL;
|
||||
LL_WARNS() << "LLWearable::getVisualParam passed invalid parameter index: " << param_index << " for wearable type: " << this->getName() << LL_ENDL;
|
||||
}
|
||||
return (F32)-1.0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -423,6 +423,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;
|
||||
|
|
|
|||
|
|
@ -177,32 +177,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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,8 @@ protected:
|
|||
void getState(LLViewerObject *object);
|
||||
void onFilterEdit();
|
||||
|
||||
bool mDirtyFilter { false };
|
||||
|
||||
public:
|
||||
class LLFilterEditor* mFilterEditor;
|
||||
LLSaveFolderState mSavedFolderState;
|
||||
|
|
|
|||
|
|
@ -88,6 +88,8 @@ public:
|
|||
|
||||
static void idle(void* user_data);
|
||||
|
||||
bool hasInventory(){ return mHaveInventory; };
|
||||
|
||||
protected:
|
||||
void reset();
|
||||
/*virtual*/ void inventoryChanged(LLViewerObject* object,
|
||||
|
|
|
|||
Loading…
Reference in New Issue