Putting in Jocelyn Frechot's X11 visual context changes. THIS WILL BREAK THE BUILD...
[freeglut] / src / freeglut_structure.c
index d3f9f05..1d064b6 100644 (file)
@@ -65,12 +65,16 @@ static void fghClearCallBacks( SFG_Window *window )
  * If parent is set to NULL, the window created will be a topmost one.
  */
 SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
-                            int x, int y, int w, int h,
+                            GLboolean positionUse, int x, int y,
+                            GLboolean sizeUse, int w, int h,
                             GLboolean gameMode, GLboolean isMenu )
 {
     /* Have the window object created */
     SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
 
+#if TARGET_HOST_UNIX_X11
+    window->Window.FBConfig = NULL;
+#endif
     fghClearCallBacks( window );
 
     /* Initialize the object properties */
@@ -98,7 +102,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
      * Open the window now. The fgOpenWindow() function is system
      * dependant, and resides in freeglut_window.c. Uses fgState.
      */
-    fgOpenWindow( window, title, x, y, w, h, gameMode,
+    fgOpenWindow( window, title, positionUse, x, y, sizeUse, w, h, gameMode,
                   (GLboolean)(parent ? GL_TRUE : GL_FALSE) );
 
     return window;
@@ -119,7 +123,8 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
 
     /* Create a window for the menu to reside in. */
 
-    fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE );
+    fgCreateWindow( NULL, "freeglut menu", GL_TRUE, x, y, GL_TRUE, w, h,
+                    GL_FALSE, GL_TRUE );
     menu->Window = fgStructure.CurrentWindow;
     glutDisplayFunc( fgDisplayMenu );
 
@@ -165,7 +170,7 @@ void fgAddToWindowDestroyList( SFG_Window* window )
      * 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 );
     }
@@ -214,6 +219,12 @@ void fgDestroyWindow( SFG_Window* window )
 
     fghClearCallBacks( window );
     fgCloseWindow( window );
+#if TARGET_HOST_UNIX_X11
+    if (window->Window.FBConfig != NULL)
+    {
+        XFree( window->Window.FBConfig );
+    }
+#endif
     free( window );
     if( fgStructure.CurrentWindow == window )
         fgStructure.CurrentWindow = NULL;
@@ -346,7 +357,7 @@ void fgCreateStructure( void )
     fgStructure.CurrentWindow = NULL;
     fgStructure.CurrentMenu = NULL;
     fgStructure.MenuContext = NULL;
-    fgStructure.GameMode = NULL;
+    fgStructure.GameModeWindow = NULL;
     fgStructure.WindowID = 0;
     fgStructure.MenuID = 0;
 }