Răsfoiți Sursa

Allow SIGINT to kill mainmenu again

Kahrl 10 ani în urmă
părinte
comite
ade70fe4b9
5 a modificat fișierele cu 11 adăugiri și 15 ștergeri
  1. 4 2
      src/guiEngine.cpp
  2. 5 1
      src/guiEngine.h
  3. 0 3
      src/guiMainMenu.h
  4. 1 4
      src/main.cpp
  5. 1 5
      src/script/lua_api/l_mainmenu.cpp

+ 4 - 2
src/guiEngine.cpp

@@ -79,7 +79,8 @@ GUIEngine::GUIEngine(	irr::IrrlichtDevice* dev,
 						gui::IGUIElement* parent,
 						IMenuManager *menumgr,
 						scene::ISceneManager* smgr,
-						MainMenuData* data) :
+						MainMenuData* data,
+						bool& kill) :
 	m_device(dev),
 	m_parent(parent),
 	m_menumanager(menumgr),
@@ -89,6 +90,7 @@ GUIEngine::GUIEngine(	irr::IrrlichtDevice* dev,
 	m_formspecgui(0),
 	m_buttonhandler(0),
 	m_menu(0),
+	m_kill(kill),
 	m_startgame(false),
 	m_script(0),
 	m_scriptdir(""),
@@ -219,7 +221,7 @@ void GUIEngine::run()
 
 	cloudInit();
 
-	while(m_device->run() && (!m_startgame)) {
+	while(m_device->run() && (!m_startgame) && (!m_kill)) {
 		driver->beginScene(true, true, video::SColor(255,140,186,250));
 
 		if (m_clouds_enabled)

+ 5 - 1
src/guiEngine.h

@@ -109,7 +109,8 @@ public:
 				gui::IGUIElement* parent,
 				IMenuManager *menumgr,
 				scene::ISceneManager* smgr,
-				MainMenuData* data);
+				MainMenuData* data,
+				bool& kill);
 
 	/** default destructor */
 	virtual ~GUIEngine();
@@ -159,6 +160,9 @@ private:
 	/** the formspec menu */
 	GUIFormSpecMenu*		m_menu;
 
+	/** reference to kill variable managed by SIGINT handler */
+	bool&					m_kill;
+
 	/** variable used to abort menu and return back to main game handling */
 	bool					m_startgame;
 

+ 0 - 3
src/guiMainMenu.h

@@ -49,9 +49,6 @@ struct MainMenuData
 	int selected_world;
 	bool simple_singleplayer_mode;
 
-	// Actions
-	bool kill;
-
 	//error handling
 	std::string errormessage;
 	MainMenuData():

+ 1 - 4
src/main.cpp

@@ -1519,7 +1519,6 @@ int main(int argc, char *argv[])
 				
 				// Initialize menu data
 				MainMenuData menudata;
-				menudata.kill = kill;
 				menudata.address = address;
 				menudata.name = playername;
 				menudata.port = itos(port);
@@ -1565,13 +1564,11 @@ int main(int argc, char *argv[])
 					}
 					infostream<<"Waited for other menus"<<std::endl;
 
-					GUIEngine* temp = new GUIEngine(device, guiroot, &g_menumgr,smgr,&menudata);
+					GUIEngine* temp = new GUIEngine(device, guiroot, &g_menumgr,smgr,&menudata,kill);
 					
 					delete temp;
 					//once finished you'll never end up here
 					smgr->clear();
-					kill = menudata.kill;
-
 				}
 
 				if(menudata.errormessage != ""){

+ 1 - 5
src/script/lua_api/l_mainmenu.cpp

@@ -131,11 +131,7 @@ int ModApiMainMenu::l_close(lua_State *L)
 	GUIEngine* engine = getGuiEngine(L);
 	assert(engine != 0);
 
-	engine->m_data->kill = true;
-
-	//close menu next time
-	engine->m_startgame = true;
-	engine->m_menu->quitMenu();
+	engine->m_kill = true;
 	return 0;
 }