mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Allow SIGINT to kill mainmenu again
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,9 +49,6 @@ struct MainMenuData
 | 
			
		||||
	int selected_world;
 | 
			
		||||
	bool simple_singleplayer_mode;
 | 
			
		||||
 | 
			
		||||
	// Actions
 | 
			
		||||
	bool kill;
 | 
			
		||||
 | 
			
		||||
	//error handling
 | 
			
		||||
	std::string errormessage;
 | 
			
		||||
	MainMenuData():
 | 
			
		||||
 
 | 
			
		||||
@@ -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 != ""){
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user