Tweaking for menu behavior in Linux regarding mouse whatnot - John Fay
[freeglut] / src / freeglut_structure.c
index d8e09ad..09ad74d 100644 (file)
@@ -273,6 +273,7 @@ void fgCloseWindows ()
 void fgDestroyWindow( SFG_Window* window, GLboolean needToClose )
 {
     SFG_Window* subWindow;
+    int menu_index ;
 
     assert( window != NULL );
     freeglut_assert_ready;
@@ -309,6 +310,15 @@ void fgDestroyWindow( SFG_Window* window, GLboolean needToClose )
     else
         fgListRemove( &fgStructure.Windows, &window->Node );
 
+    if ( window->ActiveMenu != NULL )
+      fgDeactivateMenu ( window ) ;
+
+    for ( menu_index = 0; menu_index < 3; menu_index ++ )
+    {
+      if ( window->Menu[menu_index] != NULL )
+        window->Menu[menu_index]->ParentWindow = NULL ;
+    }
+
     /*
      * OK, this window seems disconnected from the structure enough
      * in order to be closed without any bigger risks...
@@ -321,6 +331,7 @@ void fgDestroyWindow( SFG_Window* window, GLboolean needToClose )
      * have everything inside it freed and we do not have to care...
      */
     free( window );
+    if ( fgStructure.Window == window ) fgStructure.Window = NULL ;
 }
 
 /*
@@ -432,6 +443,9 @@ void fgDestroyMenu( SFG_Menu* menu )
   /*
    * Destroy the window associated with the menu
    */
+  if ( fgStructure.Window == menu->Window )
+    fgSetWindow ( menu->ParentWindow ) ;
+
   fgDestroyWindow ( menu->Window, TRUE ) ;
 
   /*
@@ -486,11 +500,11 @@ void fgDestroyStructure( void )
   /*
    * Make sure all windows and menus have been deallocated
    */
-  while( (window = (SFG_Window *)fgStructure.Windows.First) != NULL )
-    fgDestroyWindow( window, TRUE );
-
   while( (menu = (SFG_Menu *)fgStructure.Menus.First) != NULL )
     fgDestroyMenu( menu );
+
+  while( (window = (SFG_Window *)fgStructure.Windows.First) != NULL )
+    fgDestroyWindow( window, TRUE );
 }
 
 /*