From bd35913526ff34dcfaa1a8bfab88138db0abb413 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Tue, 18 May 2010 14:56:38 -0700 Subject: Fixed crash caused by creating new windlight presets with spaces in the name or deleting existing presets --- linden/indra/newview/llfloaterwindlight.cpp | 52 +++++++++++++++++--------- linden/indra/newview/llwindlightremotectrl.cpp | 2 + 2 files changed, 36 insertions(+), 18 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llfloaterwindlight.cpp b/linden/indra/newview/llfloaterwindlight.cpp index 5468ca4..42adba8 100644 --- a/linden/indra/newview/llfloaterwindlight.cpp +++ b/linden/indra/newview/llfloaterwindlight.cpp @@ -924,6 +924,14 @@ bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLS if(combo_box->getItemCount() > 0) { combo_box->setCurrentByIndex(new_index); + + // If we don't update the name here, we crash on next/prev -- MC + LLWLParamManager::instance()->mCurParams.mName = combo_box->getSelectedValue().asString(); + if (LLWLParamManager::instance()->mCurParams.mName.empty()) + { + LLWLParamManager::instance()->mCurParams.mName = "Default"; + } + LLWLParamManager::instance()->loadPreset(LLWLParamManager::instance()->mCurParams.mName, true); } } return false; @@ -1023,50 +1031,58 @@ void LLFloaterWindLight::deactivateAnimator() void LLFloaterWindLight::onClickNext(void* user_data) { - LLWLParamManager * param_mgr = LLWLParamManager::instance(); - LLWLParamSet& currentParams = param_mgr->mCurParams; - // find place of current param std::map::iterator mIt = - param_mgr->mParamList.find(currentParams.mName); + LLWLParamManager::instance()->mParamList.find(LLWLParamManager::instance()->mCurParams.mName); + + // shouldn't happen unless you delete every preset but Default + if (mIt == LLWLParamManager::instance()->mParamList.end()) + { + llwarns << "No more presets left!" << llendl; + return; + } // if at the end, loop - std::map::iterator last = param_mgr->mParamList.end(); --last; + std::map::iterator last = LLWLParamManager::instance()->mParamList.end(); --last; if(mIt == last) { - mIt = param_mgr->mParamList.begin(); + mIt = LLWLParamManager::instance()->mParamList.begin(); } else { mIt++; } - param_mgr->mAnimator.mIsRunning = false; - param_mgr->mAnimator.mUseLindenTime = false; - param_mgr->loadPreset(mIt->first, true); + LLWLParamManager::instance()->mAnimator.mIsRunning = false; + LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; + LLWLParamManager::instance()->loadPreset(mIt->first, true); } void LLFloaterWindLight::onClickPrev(void* user_data) { - LLWLParamManager * param_mgr = LLWLParamManager::instance(); - LLWLParamSet& currentParams = param_mgr->mCurParams; - // find place of current param std::map::iterator mIt = - param_mgr->mParamList.find(currentParams.mName); + LLWLParamManager::instance()->mParamList.find(LLWLParamManager::instance()->mCurParams.mName); + + // shouldn't happen unless you delete every preset but Default + if (mIt == LLWLParamManager::instance()->mParamList.end()) + { + llwarns << "No more presets left!" << llendl; + return; + } // if at the beginning, loop - if(mIt == param_mgr->mParamList.begin()) + if(mIt == LLWLParamManager::instance()->mParamList.begin()) { - std::map::iterator last = param_mgr->mParamList.end(); --last; + std::map::iterator last = LLWLParamManager::instance()->mParamList.end(); --last; mIt = last; } else { mIt--; } - param_mgr->mAnimator.mIsRunning = false; - param_mgr->mAnimator.mUseLindenTime = false; - param_mgr->loadPreset(mIt->first, true); + LLWLParamManager::instance()->mAnimator.mIsRunning = false; + LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; + LLWLParamManager::instance()->loadPreset(mIt->first, true); } //static diff --git a/linden/indra/newview/llwindlightremotectrl.cpp b/linden/indra/newview/llwindlightremotectrl.cpp index 20de2f5..f9fb7ba 100644 --- a/linden/indra/newview/llwindlightremotectrl.cpp +++ b/linden/indra/newview/llwindlightremotectrl.cpp @@ -137,6 +137,8 @@ BOOL LLWindlightRemoteCtrl::postBuild() void LLWindlightRemoteCtrl::refreshPresets() { + // Just in case, let's not ever crash here + mPresetsCombo = getChild("Presets"); if (mPresetsCombo) { // snag current preset -- cgit v1.1