Finished implementing all user-data callbacks (GCC-only for now).
[freeglut] / src / fg_structure.c
index c279b4a..4274667 100644 (file)
@@ -49,7 +49,7 @@ SFG_Structure fgStructure = { { NULL, NULL },  /* The list of windows       */
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
 
 extern void fgPlatformCreateWindow ( SFG_Window *window );
-extern void fghDefaultReshape(int width, int height);
+extern void fghDefaultReshape(int width, int height, FGCBUserData userData);
 
 static void fghClearCallBacks( SFG_Window *window )
 {
@@ -57,7 +57,10 @@ static void fghClearCallBacks( SFG_Window *window )
     {
         int i;
         for( i = 0; i < TOTAL_CALLBACKS; ++i )
+        {
             window->CallBacks[ i ] = NULL;
+            window->CallbackDatas[ i ] = NULL;
+        }
     }
 }
 
@@ -83,7 +86,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
        fgPlatformCreateWindow ( window );
 
     fghClearCallBacks( window );
-    SET_WCB( *window, Reshape, fghDefaultReshape);
+    SET_WCB( *window, Reshape, fghDefaultReshape, NULL);
 
     /* Initialize the object properties */
     window->ID = ++fgStructure.WindowID;
@@ -174,9 +177,10 @@ void fgAddToWindowDestroyList( SFG_Window* window )
      * to ensure that they are no longer called after this point.
      */
     {
-        FGCBDestroy destroy = (FGCBDestroy)FETCH_WCB( *window, Destroy );
+        FGCBDestroyUC destroy = (FGCBDestroyUC)FETCH_WCB( *window, Destroy );
+        FGCBUserData destroyData = FETCH_USER_DATA_WCB( *window, Destroy );
         fghClearCallBacks( window );
-        SET_WCB( *window, Destroy, destroy );
+        SET_WCB( *window, Destroy, destroy, destroyData );
     }
 }
 
@@ -303,7 +307,7 @@ void fgDestroyMenu( SFG_Menu* menu )
     {
         SFG_Menu *activeMenu=fgStructure.CurrentMenu;
         fgStructure.CurrentMenu = menu;
-        menu->Destroy( );
+        menu->Destroy( menu->DestroyData );
         fgStructure.CurrentMenu = activeMenu;
     }