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:
parent
c7f5e7abd4
commit
9f9e35689e
|
@ -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
|
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/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
|
20100721
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -1475,7 +1475,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||||
if (event->type == EVENT_WINDOW_CLOSED)
|
if (event->type == EVENT_WINDOW_CLOSED)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (menu->subfunction)
|
if (menu->subfunction && (event->type != EVENT_WINDOW_CLOSE))
|
||||||
{
|
{
|
||||||
int rval = (*menu->subfunction)(menu, event, menu->userdata);
|
int rval = (*menu->subfunction)(menu, event, menu->userdata);
|
||||||
if (rval)
|
if (rval)
|
||||||
|
@ -1533,7 +1533,10 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window_exists(wind))
|
if (window_exists(wind))
|
||||||
|
{
|
||||||
|
(*menu->subfunction)(menu, event, menu->userdata); // can't cancel here - too hard
|
||||||
d_free(menu);
|
d_free(menu);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue