Trying again to change \"fgStructure.Window\" to \"fgStructure.CurrentWindow\" and...
[freeglut] / src / freeglut_structure.c
index 07bf892..03c1a8f 100644 (file)
@@ -99,7 +99,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
      * dependant, and resides in freeglut_window.c. Uses fgState.
      */
     fgOpenWindow( window, title, x, y, w, h, gameMode,
-                  parent ? GL_TRUE : GL_FALSE );
+                  (GLboolean)(parent ? GL_TRUE : GL_FALSE) );
 
     return window;
 }
@@ -110,17 +110,17 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
 SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
 {
     int x = 100, y = 100, w = 100, h = 100;
-    SFG_Window *current_window = fgStructure.Window;
+    SFG_Window *current_window = fgStructure.CurrentWindow;
 
     /* Have the menu object created */
     SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
 
-    menu->ParentWindow = fgStructure.Window;
+    menu->ParentWindow = NULL;
 
     /* Create a window for the menu to reside in. */
 
     fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE );
-    menu->Window = fgStructure.Window;
+    menu->Window = fgStructure.CurrentWindow;
     glutDisplayFunc( fgDisplayMenu );
 
     glutHideWindow( );  /* Hide the window for now */
@@ -135,7 +135,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
     fgListAppend( &fgStructure.Menus, &menu->Node );
 
     /* Newly created menus implicitly become current ones */
-    fgStructure.Menu = menu;
+    fgStructure.CurrentMenu = menu;
 
     return menu;
 }
@@ -153,8 +153,8 @@ void fgAddToWindowDestroyList( SFG_Window* window )
     fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
 
     /* Check if the window is the current one... */
-    if( fgStructure.Window == window )
-        fgStructure.Window = NULL;
+    if( fgStructure.CurrentWindow == window )
+        fgStructure.CurrentWindow = NULL;
 
     /*
      * Clear all window callbacks except Destroy, which will
@@ -192,8 +192,6 @@ void fgCloseWindows( )
  */
 void fgDestroyWindow( SFG_Window* window )
 {
-    int menu_index;
-
     FREEGLUT_INTERNAL_ERROR_EXIT ( window, "Window destroy function called with null window",
                                    "fgDestroyWindow" );
 
@@ -201,7 +199,7 @@ void fgDestroyWindow( SFG_Window* window )
         fgDestroyWindow( ( SFG_Window * )window->Children.First );
 
     {
-        SFG_Window *activeWindow = fgStructure.Window;
+        SFG_Window *activeWindow = fgStructure.CurrentWindow;
         INVOKE_WCB( *window, Destroy, ( ) );
         fgSetWindow( activeWindow );
     }
@@ -214,15 +212,11 @@ void fgDestroyWindow( SFG_Window* window )
     if( window->ActiveMenu )
       fgDeactivateMenu( window );
 
-    for( menu_index = 0; menu_index < 3; menu_index ++ )
-        if( window->Menu[ menu_index ] )
-            window->Menu[ menu_index ]->ParentWindow = NULL;
-
     fghClearCallBacks( window );
     fgCloseWindow( window );
     free( window );
-    if( fgStructure.Window == window )
-        fgStructure.Window = NULL;
+    if( fgStructure.CurrentWindow == window )
+        fgStructure.CurrentWindow = NULL;
 }
 
 /*
@@ -234,6 +228,10 @@ static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )
     SFG_Window *subWindow;
     int i;
 
+    /* Check whether this is the active menu in the window */
+    if ( menu == window->ActiveMenu )
+        window->ActiveMenu = NULL ;
+
     /*
      * Check if the menu is attached to the current window,
      * if so, have it detached (by overwriting with a NULL):
@@ -294,10 +292,10 @@ void fgDestroyMenu( SFG_Menu* menu )
      */
     if( menu->Destroy )
     {
-        SFG_Menu *activeMenu=fgStructure.Menu;
-        fgStructure.Menu = menu;
+        SFG_Menu *activeMenu=fgStructure.CurrentMenu;
+        fgStructure.CurrentMenu = menu;
         menu->Destroy( );
-        fgStructure.Menu = activeMenu;
+        fgStructure.CurrentMenu = activeMenu;
     }
 
     /*
@@ -317,12 +315,12 @@ void fgDestroyMenu( SFG_Menu* menu )
         free( entry );
     }
 
-    if( fgStructure.Window == menu->Window )
-        fgSetWindow( menu->ParentWindow );
+    if( fgStructure.CurrentWindow == menu->Window )
+        fgSetWindow( NULL );
     fgDestroyWindow( menu->Window );
     fgListRemove( &fgStructure.Menus, &menu->Node );
-    if( fgStructure.Menu == menu )
-        fgStructure.Menu = NULL;
+    if( fgStructure.CurrentMenu == menu )
+        fgStructure.CurrentMenu = NULL;
 
     free( menu );
 }