For menus, only call the user function for closing immediately before closing, fixing memory errors when the user function frees memory

This commit is contained in:
kreatordxx 2010-07-25 02:30:53 +00:00
parent c7f5e7abd4
commit 9f9e35689e
2 changed files with 5 additions and 1 deletions

View file

@ -4,6 +4,7 @@ D1X-Rebirth Changelog
--------
arch/sdl/event.c, arch/ogl/gr.c, arch/sdl/gr.c: Exit SDL_PollEvent early if window changes, to avoid menu problems when pressing keys fast; fix 'condition is always false' warning
main/inferno.c, main/inferno.h: Rewrite quit system, fixing *many* bugs with it :P
main/newmenu: For menus, only call the user function for closing immediately before closing, fixing memory errors when the user function frees memory
20100721
--------

View file

@ -1475,7 +1475,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
if (event->type == EVENT_WINDOW_CLOSED)
return 0;
if (menu->subfunction)
if (menu->subfunction && (event->type != EVENT_WINDOW_CLOSE))
{
int rval = (*menu->subfunction)(menu, event, menu->userdata);
if (rval)
@ -1533,7 +1533,10 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
}
if (window_exists(wind))
{
(*menu->subfunction)(menu, event, menu->userdata); // can't cancel here - too hard
d_free(menu);
}
break;
default: