diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index b9b89facb8..cdfe4a894b 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -138,6 +138,7 @@ void ScreenManager::Update( float fDeltaTime ) ls.m_pScreen->HandleScreenMessage( SM_LoseFocus ); SendMessageToTopScreen( SM ); + SendMessageToTopScreen( ls.m_SendOnPop ); SendMessageToTopScreen( SM_GainFocus ); if( ls.m_bDeleteWhenDone ) @@ -435,7 +436,7 @@ void ScreenManager::ClearScreenStack() } /* Add a screen to m_ScreenStack. This is the only function that adds to m_ScreenStack. */ -void ScreenManager::PushScreen( Screen *pNewScreen, bool bDeleteWhenDone ) +void ScreenManager::PushScreen( Screen *pNewScreen, bool bDeleteWhenDone, ScreenMessage SendOnPop ) { if( m_ScreenStack.size() ) m_ScreenStack.back().m_pScreen->HandleScreenMessage( SM_LoseFocus ); @@ -443,6 +444,7 @@ void ScreenManager::PushScreen( Screen *pNewScreen, bool bDeleteWhenDone ) LoadedScreen ls; ls.m_pScreen = pNewScreen; ls.m_bDeleteWhenDone = bDeleteWhenDone; + ls.m_SendOnPop = SendOnPop; m_ScreenStack.push_back( ls ); pNewScreen->BeginScreen(); diff --git a/stepmania/src/ScreenManager.h b/stepmania/src/ScreenManager.h index 86f93e1949..85a1d691ec 100644 --- a/stepmania/src/ScreenManager.h +++ b/stepmania/src/ScreenManager.h @@ -42,7 +42,7 @@ public: bool ConcurrentlyPrepareScreen( const CString &sScreenName, ScreenMessage send_when_done = SM_None ); bool IsConcurrentlyLoading() const; void DeletePreparedScreens(); - void PushScreen( Screen *pNewScreen, bool bDeleteWhenDone=false ); + void PushScreen( Screen *pNewScreen, bool bDeleteWhenDone=false, ScreenMessage SendOnPop=SM_None ); void PopTopScreen( ScreenMessage SM ); Screen *GetTopScreen(); @@ -78,6 +78,7 @@ private: { Screen *m_pScreen; bool m_bDeleteWhenDone; + ScreenMessage m_SendOnPop; }; vector m_ScreenStack; // bottommost to topmost vector m_OverlayScreens;