From b5300b9bfba5a5a62b587e3ed19c7e2cb14dada7 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Fri, 14 Aug 2015 23:40:43 -0400 Subject: [PATCH] Fix crash when deleting a monster ability --- src/scenedit/scen.core.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/scenedit/scen.core.cpp b/src/scenedit/scen.core.cpp index 8e519a85..83d02370 100644 --- a/src/scenedit/scen.core.cpp +++ b/src/scenedit/scen.core.cpp @@ -1200,9 +1200,9 @@ static bool edit_monst_abil_detail(cDialog& me, std::string hit, cMonster& monst cDialog abil_dlg("edit-mabil-" + which_dlg, &me); abil_dlg["okay"].attachClickHandler(std::bind(&cDialog::toast, _1, true)); abil_dlg["cancel"].attachClickHandler(std::bind(&cDialog::toast, _1, false)); - abil_dlg["delete"].attachClickHandler([&monst,iter](cDialog& me,std::string,eKeyMod){ + abil_dlg["delete"].attachClickHandler([&monst,&iter](cDialog& me,std::string,eKeyMod){ // TODO: Show confirmation first? - return me.toast(false), monst.abil.erase(iter), true; + return me.toast(false), iter = monst.abil.erase(iter), true; }); auto onfocus = [&](cDialog& me,std::string,bool losing) -> bool { if(!losing) return true; @@ -1329,8 +1329,11 @@ static bool edit_monst_abil_detail(cDialog& me, std::string hit, cMonster& monst if(abil_dlg.accepted()) iter->second = abil_params; put_monst_abils_in_dlog(me, monst); - size_t iShow = std::distance(monst.abil.begin(), iter); - dynamic_cast(me["abils"]).setPage(iShow / 4); + if(monst.abil.size() > 0) { + cStack& stk = dynamic_cast(me["abils"]); + size_t iShow = iter == monst.abil.end() ? stk.getPageCount() - 1 : std::distance(monst.abil.begin(), iter) / 4; + stk.setPage(iShow); + } return true; }