* 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;
}
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 */
fgListAppend( &fgStructure.Menus, &menu->Node );
/* Newly created menus implicitly become current ones */
- fgStructure.Menu = menu;
+ fgStructure.CurrentMenu = menu;
return menu;
}
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
* to ensure that they are no longer called after this point.
*/
{
- FGCBDestroy destroy = FETCH_WCB( *window, Destroy );
+ FGCBDestroy destroy = (FGCBDestroy)FETCH_WCB( *window, Destroy );
fghClearCallBacks( window );
SET_WCB( *window, Destroy, destroy );
}
*/
void fgDestroyWindow( SFG_Window* window )
{
- int menu_index;
-
FREEGLUT_INTERNAL_ERROR_EXIT ( window, "Window destroy function called with null window",
"fgDestroyWindow" );
fgDestroyWindow( ( SFG_Window * )window->Children.First );
{
- SFG_Window *activeWindow = fgStructure.Window;
+ SFG_Window *activeWindow = fgStructure.CurrentWindow;
INVOKE_WCB( *window, Destroy, ( ) );
fgSetWindow( activeWindow );
}
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;
}
/*
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):
*/
- for( i = 0; i < 3; i++ )
+ for( i = 0; i < FREEGLUT_MAX_MENUS; i++ )
if( window->Menu[ i ] == menu )
window->Menu[ i ] = NULL;
*/
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;
}
/*
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 );
}
fgListInit(&fgStructure.Windows);
fgListInit(&fgStructure.Menus);
fgListInit(&fgStructure.WindowsToDestroy);
+
+ fgStructure.CurrentWindow = NULL;
+ fgStructure.CurrentMenu = NULL;
+ fgStructure.MenuContext = NULL;
+ fgStructure.GameMode = NULL;
+ fgStructure.WindowID = 0;
+ fgStructure.MenuID = 0;
}
/*