diff --git a/LEGO1/mxcompositepresenter.cpp b/LEGO1/mxcompositepresenter.cpp index d3128c62..6cf14956 100644 --- a/LEGO1/mxcompositepresenter.cpp +++ b/LEGO1/mxcompositepresenter.cpp @@ -62,7 +62,15 @@ MxResult MxCompositePresenter::StartAction(MxStreamController* p_controller, MxD MxDSAction* action; if (MxPresenter::StartAction(p_controller, p_action) == SUCCESS) { - while (cursor.Next(action)) { + // The usual cursor.Next() loop doesn't match here, even though + // the logic is the same. It does match when "deconstructed" into + // the following Head(), Current() and NextFragment() calls, + // but this seems unlikely to be the original code. + // The alpha debug build also uses Next(). + cursor.Head(); + while (cursor.Current(action)) { + cursor.NextFragment(); + MxBool success = FALSE; action->CopyFlags(m_action->GetFlags()); diff --git a/LEGO1/mxlist.h b/LEGO1/mxlist.h index e3428f98..83b465b9 100644 --- a/LEGO1/mxlist.h +++ b/LEGO1/mxlist.h @@ -95,6 +95,13 @@ class MxListCursor : public MxCore { void Reset() { m_match = NULL; } void Prepend(T p_newobj); + // TODO: Probably shouldn't exist + void NextFragment() + { + if (m_match) + m_match = m_match->GetNext(); + } + private: MxList* m_list; MxListEntry* m_match;