diff --git a/indra/newview/ao.cpp b/indra/newview/ao.cpp index 44daf3feba..14ee05dea5 100644 --- a/indra/newview/ao.cpp +++ b/indra/newview/ao.cpp @@ -82,7 +82,6 @@ void FloaterAO::updateSetParameters() mDisableMouselookCheckBox->setValue(mSelectedSet->getMouselookStandDisable()); bool isDefault = (mSelectedSet == AOEngine::instance().getDefaultSet()); mDefaultCheckBox->setValue(isDefault); - mDefaultCheckBox->setEnabled(!isDefault); updateSmart(); } @@ -310,7 +309,7 @@ void FloaterAO::enableSetControls(bool enable) mSetSelectorSmall->setEnabled(enable); mActivateSetButton->setEnabled(enable); mRemoveButton->setEnabled(enable); - mDefaultCheckBox->setEnabled(enable && (mSelectedSet != AOEngine::instance().getDefaultSet())); + mDefaultCheckBox->setEnabled(enable); mOverrideSitsCheckBox->setEnabled(enable); mOverrideSitsCheckBoxSmall->setEnabled(enable); mDisableMouselookCheckBox->setEnabled(enable); @@ -589,7 +588,8 @@ void FloaterAO::onCheckDefault() { if (mSelectedSet) { - AOEngine::instance().setDefaultSet(mSelectedSet); + AOSet* selectedSet = mDefaultCheckBox->getValue().asBoolean() ? mSelectedSet : nullptr; + AOEngine::instance().setDefaultSet(selectedSet); } } diff --git a/indra/newview/aoengine.cpp b/indra/newview/aoengine.cpp index 533ebc56bd..71b8cdcc9a 100644 --- a/indra/newview/aoengine.cpp +++ b/indra/newview/aoengine.cpp @@ -1584,6 +1584,7 @@ void AOEngine::update() if (categories) { + std::vector> setsToRead; for (const auto& currentCategory : *categories) { const std::string& setFolderName = currentCategory->getName(); @@ -1610,13 +1611,7 @@ void AOEngine::update() newSet = new AOSet(currentCategory->getUUID()); newSet->setName(setName); mSets.emplace_back(newSet); - - if (auto currentState = gSavedPerAccountSettings.getLLSD("FSCurrentAOState"); - currentState.has("CurrentSet") && currentState["CurrentSet"].asString() == setName) - { - LL_DEBUGS("AOEngine") << "Selecting current set from settings: " << setName << LL_ENDL; - mCurrentSet = newSet; - } + setsToRead.push_back({ currentCategory->getUUID(), newSet }); } else { @@ -1650,31 +1645,41 @@ void AOEngine::update() else if (params[num] == "**") { mDefaultSet = newSet; - if (!mCurrentSet) - { - LL_DEBUGS("AOEngine") << "No set selected as current yet - setting default set as current: " << setName << LL_ENDL; - mCurrentSet = newSet; - } + mCurrentSet = newSet; } else { LL_WARNS("AOEngine") << "Unknown AO set option " << params[num] << LL_ENDL; } } + } - if (gInventory.isCategoryComplete(currentCategory->getUUID())) + for (const auto& [categoryUUID, newSet] : setsToRead) + { + if (!mDefaultSet) { - LL_DEBUGS("AOEngine") << "Set " << params[0] << " is complete, reading states ..." << LL_ENDL; + // No default is set, so instead use the set saved in FSCurrentAOState + if (auto currentState = gSavedPerAccountSettings.getLLSD("FSCurrentAOState"); + currentState.has("CurrentSet") && currentState["CurrentSet"].asString() == newSet->getName()) + { + LL_DEBUGS("AOEngine") << "Selecting current set from settings: " << newSet->getName() << LL_ENDL; + mCurrentSet = newSet; + } + } + + if (gInventory.isCategoryComplete(categoryUUID)) + { + LL_DEBUGS("AOEngine") << "Set " << newSet->getName() << " is complete, reading states ..." << LL_ENDL; LLInventoryModel::cat_array_t* stateCategories; - gInventory.getDirectDescendentsOf(currentCategory->getUUID(), stateCategories, items); + gInventory.getDirectDescendentsOf(categoryUUID, stateCategories, items); newSet->setComplete(true); for (const auto& stateCategory : *stateCategories) { std::vector state_params; LLStringUtil::getTokens(stateCategory->getName(), state_params, ":"); - if (params.empty()) + if (state_params.empty()) { LL_WARNS("AOEngine") << "Unexpected state folder found in ao set: " << stateCategory->getName() << LL_ENDL; continue; @@ -1726,8 +1731,8 @@ void AOEngine::update() } else { - LL_DEBUGS("AOEngine") << "Set " << setName << " is incomplete, fetching descendents" << LL_ENDL; - gInventory.fetchDescendentsOf(currentCategory->getUUID()); + LL_DEBUGS("AOEngine") << "Set " << newSet->getName() << " is incomplete, fetching descendents" << LL_ENDL; + gInventory.fetchDescendentsOf(categoryUUID); } } } diff --git a/indra/newview/skins/default/xui/en/panel_ao.xml b/indra/newview/skins/default/xui/en/panel_ao.xml index ddf71ac170..17d0f2fe42 100644 --- a/indra/newview/skins/default/xui/en/panel_ao.xml +++ b/indra/newview/skins/default/xui/en/panel_ao.xml @@ -55,7 +55,7 @@