From 5ee52b0db50773229f34e6dcca866e3d40e2d8a6 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 18 Jul 2005 02:28:16 +0000 Subject: [PATCH] The screen that pushes a screen sets the pop message, not the pushed screen. This pushing screens without them needing to be aware of it. (This will also allow a pushed screen to replace itself with another pushed screen without having to propagate the finalization message across; that'll make more sense if the rest of this pans out ...) --- stepmania/src/ScreenManager.cpp | 4 +++- stepmania/src/ScreenManager.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) 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;