X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=freeglut-1.3%2Ffreeglut_structure.c;h=6b54d50466682b830adff601e6e4a4cd5d7ae8d9;hb=244417cf0e67e55547c077f771513e67f362a8c3;hp=2da3e1ff40b43c2ce0e270e47575fbee3ec38a61;hpb=67454172b30a73a52957022e95fbc393e3490d25;p=freeglut diff --git a/freeglut-1.3/freeglut_structure.c b/freeglut-1.3/freeglut_structure.c index 2da3e1f..6b54d50 100644 --- a/freeglut-1.3/freeglut_structure.c +++ b/freeglut-1.3/freeglut_structure.c @@ -209,7 +209,7 @@ void fgAddToWindowDestroyList ( SFG_Window* window, GLboolean needToClose ) void fgCloseWindows () { SFG_WindowList *window_ptr = WindowsToDestroy ; - WindowsToDestroy = (SFG_WindowList*)NULL ; // In case the destroy callbacks cause more windows to be closed + WindowsToDestroy = (SFG_WindowList*)NULL ; /* In case the destroy callbacks cause more windows to be closed */ while ( window_ptr ) { @@ -252,9 +252,15 @@ void fgDestroyWindow( SFG_Window* window, GLboolean needToClose ) /* * If the programmer defined a destroy callback, call it + * A. Donev: But first make this the active window */ if ( window->Callbacks.Destroy != NULL ) + { + SFG_Window *activeWindow = fgStructure.Window ; + fgStructure.Window = window ; window->Callbacks.Destroy () ; + fgStructure.Window = activeWindow ; + } /* * Now we should remove the reference to this window from its parent @@ -354,6 +360,18 @@ void fgDestroyMenu( SFG_Menu* menu ) } /* + * If the programmer defined a destroy callback, call it + * A. Donev: But first make this the active menu + */ + if ( menu->Destroy != NULL ) + { + SFG_Menu *activeMenu=fgStructure.Menu; + fgStructure.Menu = menu; + menu->Destroy () ; + fgStructure.Menu = activeMenu; + } + + /* * Now we are pretty sure the menu is not used anywhere * and that we can remove all of its entries */