Added fgInitCallBacks() to freeglut_structure.c. (The function takes
[freeglut] / src / freeglut_structure.c
index bc88a50..30a905b 100644 (file)
@@ -52,6 +52,13 @@ SFG_Structure fgStructure = { { NULL, NULL },  /* The list of windows       */
 
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
 
+void fgInitCallBacks( SFG_Window *window )
+{
+    int i;
+    for( i = 0; i < TOTAL_CALLBACKS; ++i )
+        window->CallBacks[ i ] = NULL;
+}
+
 /*
  * This private function creates, opens and adds to the hierarchy
  * a freeglut window complete with OpenGL context and stuff...
@@ -67,6 +74,8 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
     SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
     int fakeArgc = 0;
 
+    fgInitCallBacks( window );
+
     /*
      * If the freeglut internals haven't been initialized yet,
      * do it now. Hack's idea courtesy of Chris Purnell...
@@ -266,11 +275,14 @@ void fgDestroyWindow( SFG_Window* window, GLboolean needToClose )
     while ( (subWindow = (SFG_Window *)window->Children.First) != NULL )
         fgDestroyWindow( subWindow, needToClose );
 
+    /*
+     * XXX Since INVOKE_WCB() tests the function pointer, why not make
+     * XXX this unconditional?  Overhead is close to nil, and it would
+     * XXX clarify the code by omitting a conditional test.
+     */
     if ( FETCH_WCB( *window, Destroy ) )
     {
       SFG_Window *activeWindow = fgStructure.Window ;
-      /* fgSetWindow ( window ) ; */
-      /* window->Callbacks.Destroy () ; */
       INVOKE_WCB( *window, Destroy, ( ) );
       fgSetWindow ( activeWindow ) ;
     }