1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanism

This commit is contained in:
Kahrl 2014-10-24 16:22:05 +02:00
parent 73bf791fe1
commit b49e5cfc70
5 changed files with 27 additions and 17 deletions

View file

@ -944,9 +944,16 @@ static inline void create_formspec_menu(GUIFormSpecMenu** cur_formspec,
if (*cur_formspec == 0) {
*cur_formspec = new GUIFormSpecMenu(device, guiroot, -1, &g_menumgr,
invmgr, gamedef, tsrc, fs_src, txt_dest, cur_formspec, client);
invmgr, gamedef, tsrc, fs_src, txt_dest, client);
(*cur_formspec)->doPause = false;
(*cur_formspec)->drop();
/*
Caution: do not call (*cur_formspec)->drop() here --
the reference might outlive the menu, so we will
periodically check if *cur_formspec is the only
remaining reference (i.e. the menu was removed)
and delete it in that case.
*/
}
else {
(*cur_formspec)->setFormSource(fs_src);
@ -3417,10 +3424,16 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
}
/*
make sure menu is on top
1. Delete formspec menu reference if menu was removed
2. Else, make sure formspec menu is on top
*/
if ((!noMenuActive()) && (current_formspec)) {
if (current_formspec) {
if (current_formspec->getReferenceCount() == 1) {
current_formspec->drop();
current_formspec = NULL;
} else if (!noMenuActive()) {
guiroot->bringToFront(current_formspec);
}
}
/*
@ -3509,6 +3522,11 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
g_menumgr.m_stack.front()->setVisible(false);
g_menumgr.deletingMenu(g_menumgr.m_stack.front());
}
if (current_formspec) {
current_formspec->drop();
current_formspec = NULL;
}
/*
Draw a "shutting down" screen, which will be shown while the map
generator and other stuff quits