From: <au...@us...> - 2010-10-27 23:13:24
|
Revision: 6366 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=6366&view=rev Author: auria Date: 2010-10-27 23:13:18 +0000 (Wed, 27 Oct 2010) Log Message: ----------- Fixed crash when deleting keyboard config + added assertions to detect more possible bugs in the future Modified Paths: -------------- main/trunk/src/guiengine/abstract_state_manager.cpp main/trunk/src/states_screens/dialogs/confirm_dialog.cpp main/trunk/src/states_screens/dialogs/confirm_dialog.hpp main/trunk/src/states_screens/options_screen_input2.cpp Modified: main/trunk/src/guiengine/abstract_state_manager.cpp =================================================================== --- main/trunk/src/guiengine/abstract_state_manager.cpp 2010-10-27 23:02:03 UTC (rev 6365) +++ main/trunk/src/guiengine/abstract_state_manager.cpp 2010-10-27 23:13:18 UTC (rev 6366) @@ -21,6 +21,7 @@ #include <vector> #include "guiengine/engine.hpp" +#include "guiengine/modaldialog.hpp" #include "guiengine/screen.hpp" #include "input/device_manager.hpp" @@ -43,6 +44,8 @@ void AbstractStateManager::enterGameState() { + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this + if (getCurrentScreen() != NULL) getCurrentScreen()->tearDown(); m_menu_stack.clear(); m_menu_stack.push_back(RACE_STATE_NAME); @@ -81,6 +84,8 @@ // currently, only a single in-game menu is supported assert(m_game_mode != INGAME_MENU); + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this + // Send tear-down event to previous menu if (m_menu_stack.size() > 0 && m_game_mode != GAME) getCurrentScreen()->tearDown(); @@ -103,6 +108,8 @@ void AbstractStateManager::pushScreen(Screen* screen) { + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this + if (!screen->isLoaded()) screen->loadFromFile(); pushMenu(screen->getName()); screen->init(); @@ -115,6 +122,7 @@ void AbstractStateManager::replaceTopMostScreen(Screen* screen) { assert(m_game_mode != GAME); + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this if (!screen->isLoaded()) screen->loadFromFile(); std::string name = screen->getName(); @@ -138,6 +146,7 @@ void AbstractStateManager::reshowTopMostMenu() { assert(m_game_mode != GAME); + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this // Send tear-down event to previous menu if (m_menu_stack.size() > 0) @@ -196,6 +205,8 @@ void AbstractStateManager::resetAndGoToScreen(Screen* screen) { + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this + std::string name = screen->getName(); if (m_game_mode != GAME) getCurrentScreen()->tearDown(); @@ -216,6 +227,7 @@ { assert(screens != NULL); assert(screens[0] != NULL); + assert(!ModalDialog::isADialogActive()); // you need to close any dialog before calling this if (m_game_mode != GAME) getCurrentScreen()->tearDown(); m_menu_stack.clear(); Modified: main/trunk/src/states_screens/dialogs/confirm_dialog.cpp =================================================================== --- main/trunk/src/states_screens/dialogs/confirm_dialog.cpp 2010-10-27 23:02:03 UTC (rev 6365) +++ main/trunk/src/states_screens/dialogs/confirm_dialog.cpp 2010-10-27 23:13:18 UTC (rev 6366) @@ -50,7 +50,7 @@ if (eventSource == "cancel") { - ModalDialog::dismiss(); + //ModalDialog::dismiss(); m_listener->onCancel(); @@ -58,7 +58,7 @@ } else if (eventSource == "confirm") { - ModalDialog::dismiss(); + //ModalDialog::dismiss(); m_listener->onConfirm(); @@ -67,3 +67,10 @@ return GUIEngine::EVENT_LET; } + +// ------------------------------------------------------------------------------------------------------ + +void ConfirmDialog::IConfirmDialogListener::onCancel() +{ + ModalDialog::dismiss(); +} Modified: main/trunk/src/states_screens/dialogs/confirm_dialog.hpp =================================================================== --- main/trunk/src/states_screens/dialogs/confirm_dialog.hpp 2010-10-27 23:02:03 UTC (rev 6365) +++ main/trunk/src/states_screens/dialogs/confirm_dialog.hpp 2010-10-27 23:13:18 UTC (rev 6366) @@ -40,11 +40,17 @@ IConfirmDialogListener() {} virtual ~IConfirmDialogListener() {} - /** \brief Implement to be notified of dialog confirmed */ + /** \brief Implement to be notified of dialog confirmed. + * \note The dialog is not closed automatically, close it in the callback if this + * behavior is desired. + */ virtual void onConfirm() = 0; - /** \brief Implement to be notified of dialog cancelled */ - virtual void onCancel() {} + /** \brief Implement to be notified of dialog cancelled. + * \note The default implementation is to close the modal dialog, but you may override + * this method to change the behavior. + */ + virtual void onCancel(); }; private: Modified: main/trunk/src/states_screens/options_screen_input2.cpp =================================================================== --- main/trunk/src/states_screens/options_screen_input2.cpp 2010-10-27 23:02:03 UTC (rev 6365) +++ main/trunk/src/states_screens/options_screen_input2.cpp 2010-10-27 23:13:18 UTC (rev 6366) @@ -418,6 +418,7 @@ assert(success); m_config = NULL; input_manager->getDeviceList()->serialize(); + ModalDialog::dismiss(); StateManager::get()->replaceTopMostScreen(OptionsScreenInput::getInstance()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |