some function renaming, etc (John Fay)
[freeglut] / src / freeglut_structure.c
index 71f9e45..6e1f542 100644 (file)
@@ -29,7 +29,7 @@
 #include "config.h"
 #endif
 
-#include "../include/GL/freeglut.h"
+#include <GL/freeglut.h>
 #include "freeglut_internal.h"
 
 
@@ -53,7 +53,7 @@ SFG_Structure fgStructure = { { NULL, NULL },  /* The list of windows       */
 
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
 
-void fgClearCallBacks( SFG_Window *window )
+static void fghClearCallBacks( SFG_Window *window )
 {
     if( window )
     {
@@ -73,13 +73,11 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
                             int x, int y, int w, int h,
                             GLboolean gameMode, GLboolean isMenu )
 {
-    /*
-     * Have the window object created
-     */
+    /* Have the window object created */
     SFG_Window *window = (SFG_Window *)calloc( sizeof(SFG_Window), 1 );
     int fakeArgc = 0;
 
-    fgClearCallBacks( window );
+    fghClearCallBacks( window );
 
     /*
      * If the freeglut internals haven't been initialized yet,
@@ -88,9 +86,7 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
     if( !fgState.Initialised )
         glutInit( &fakeArgc, NULL );
 
-    /*
-     * Initialize the object properties
-     */
+    /* Initialize the object properties */
     window->ID = ++fgStructure.WindowID;
     window->State.OldHeight = window->State.OldWidth = -1;
 
@@ -103,13 +99,14 @@ SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
     else
         fgListAppend( &fgStructure.Windows, &window->Node );
 
-    /*
-     * Set the default mouse cursor and reset the modifiers value
-     */
+    /* Set the default mouse cursor and reset the modifiers value */
     window->State.Cursor    = GLUT_CURSOR_INHERIT;
 
     window->IsMenu = isMenu;
 
+    window->State.IgnoreKeyRepeat = GL_FALSE;
+    window->State.KeyRepeating    = GL_FALSE;
+
     /*
      * Open the window now. The fgOpenWindow() function is system
      * dependant, and resides in freeglut_window.c. Uses fgState.
@@ -128,9 +125,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
     int x = 100, y = 100, w = 100, h = 100;
     SFG_Window *current_window = fgStructure.Window;
 
-    /*
-     * Have the menu object created
-     */
+    /* Have the menu object created */
     SFG_Menu* menu = (SFG_Menu *)calloc( sizeof(SFG_Menu), 1 );
     int fakeArgc = 0;
 
@@ -143,20 +138,16 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
 
     menu->ParentWindow = fgStructure.Window;
 
-    /*
-     * Create a window for the menu to reside in.
-     */
+    /* Create a window for the menu to reside in. */
 
-    fgCreateWindow( NULL, NULL, x, y, w, h, GL_FALSE, GL_TRUE );
+    fgCreateWindow( NULL, "freeglut menu", x, y, w, h, GL_FALSE, GL_TRUE );
     menu->Window = fgStructure.Window;
     glutDisplayFunc( fgDisplayMenu );
 
     glutHideWindow( );  /* Hide the window for now */
     fgSetWindow( current_window );
 
-    /*
-     * Initialize the object properties:
-     */
+    /* Initialize the object properties: */
     menu->ID       = ++fgStructure.MenuID;
     menu->Callback = menuCallback;
     menu->ActiveEntry = NULL;
@@ -164,9 +155,7 @@ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback )
     fgListInit( &menu->Entries );
     fgListAppend( &fgStructure.Menus, &menu->Node );
 
-    /*
-     * Newly created menus implicitly become current ones
-     */
+    /* Newly created menus implicitly become current ones */
     fgStructure.Menu = menu;
 
     return menu;
@@ -184,9 +173,7 @@ void fgAddToWindowDestroyList( SFG_Window* window )
     new_list_entry->window = window;
     fgListAppend( &fgStructure.WindowsToDestroy, &new_list_entry->node );
 
-    /*
-     * Check if the window is the current one...
-     */
+    /* Check if the window is the current one... */
     if( fgStructure.Window == window )
         fgStructure.Window = NULL;
 
@@ -199,8 +186,8 @@ void fgAddToWindowDestroyList( SFG_Window* window )
      * to ensure that they are no longer called after this point.
      */
     {
-        void *destroy = FETCH_WCB( *window, Destroy );
-        fgClearCallBacks( window );
+        FGCBDestroy destroy = FETCH_WCB( *window, Destroy );
+        fghClearCallBacks( window );
         SET_WCB( *window, Destroy, destroy );
     }
 }
@@ -252,7 +239,7 @@ void fgDestroyWindow( SFG_Window* window )
         if( window->Menu[ menu_index ] )
             window->Menu[ menu_index ]->ParentWindow = NULL;
 
-    fgClearCallBacks( window );
+    fghClearCallBacks( window );
     fgCloseWindow( window );
     free( window );
     if( fgStructure.Window == window )
@@ -276,9 +263,7 @@ static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )
         if( window->Menu[ i ] == menu )
             window->Menu[ i ] = NULL;
 
-    /*
-     * Call this function for all of the window's children recursively:
-     */
+    /* Call this function for all of the window's children recursively: */
     for( subWindow = (SFG_Window *)window->Children.First;
          subWindow;
          subWindow = (SFG_Window *)subWindow->Node.Next)
@@ -308,22 +293,17 @@ void fgDestroyMenu( SFG_Menu* menu )
 {
     SFG_Window *window;
     SFG_Menu *from;
-    SFG_MenuEntry *entry;
 
     assert( menu );
     freeglut_assert_ready;
 
-    /*
-     * First of all, have all references to this menu removed from all windows:
-     */
+    /* First of all, have all references to this menu removed from all windows: */
     for( window = (SFG_Window *)fgStructure.Windows.First;
          window;
          window = (SFG_Window *)window->Node.Next )
         fghRemoveMenuFromWindow( window, menu );
 
-    /*
-     * Now proceed with removing menu entries that lead to this menu
-     */
+    /* Now proceed with removing menu entries that lead to this menu */
     for( from = ( SFG_Menu * )fgStructure.Menus.First;
          from;
          from = ( SFG_Menu * )from->Node.Next )
@@ -345,8 +325,10 @@ void fgDestroyMenu( SFG_Menu* menu )
      * Now we are pretty sure the menu is not used anywhere
      * and that we can remove all of its entries
      */
-    while( entry = ( SFG_MenuEntry * )menu->Entries.First )
+    while( menu->Entries.First )
     {
+        SFG_MenuEntry *entry = ( SFG_MenuEntry * ) menu->Entries.First;
+
         fgListRemove( &menu->Entries, &entry->Node );
 
         if( entry->Text )
@@ -354,7 +336,6 @@ void fgDestroyMenu( SFG_Menu* menu )
         entry->Text = NULL;
 
         free( entry );
-        entry = NULL;
     }
 
     if( fgStructure.Window == menu->Window )
@@ -395,17 +376,13 @@ void fgDestroyStructure( void )
 {
     freeglut_assert_ready;
 
-    /*
-     * Clean up the WindowsToDestroy list.
-     */
+    /* Clean up the WindowsToDestroy list. */
     fgCloseWindows( );
 
-    /*
-     * Make sure all windows and menus have been deallocated
-     */
+    /* Make sure all windows and menus have been deallocated */
     while( fgStructure.Menus.First )
         fgDestroyMenu( ( SFG_Menu * )fgStructure.Menus.First );
-    
+
     while( fgStructure.Windows.First )
         fgDestroyWindow( ( SFG_Window * )fgStructure.Windows.First );
 }
@@ -420,9 +397,7 @@ void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
     assert( enumCallback && enumerator );
     freeglut_assert_ready;
 
-    /*
-     * Check every of the top-level windows
-     */
+    /* Check every of the top-level windows */
     for( window = ( SFG_Window * )fgStructure.Windows.First;
          window;
          window = ( SFG_Window * )window->Node.Next )
@@ -464,9 +439,7 @@ static void fghcbWindowByHandle( SFG_Window *window,
     if ( enumerator->found )
         return;
 
-    /*
-     * Check the window's handle. Hope this works. Looks ugly. That's for sure.
-     */
+    /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */
     if( window->Window.Handle == (SFG_WindowHandleType) (enumerator->data) )
     {
         enumerator->found = GL_TRUE;
@@ -475,9 +448,7 @@ static void fghcbWindowByHandle( SFG_Window *window,
         return;
     }
 
-    /*
-     * Otherwise, check this window's children
-     */
+    /* Otherwise, check this window's children */
     fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );
 }
 
@@ -490,9 +461,7 @@ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )
 {
     SFG_Enumerator enumerator;
 
-    /*
-     * This is easy and makes use of the windows enumeration defined above
-     */
+    /* This is easy and makes use of the windows enumeration defined above */
     enumerator.found = GL_FALSE;
     enumerator.data = (void *)hWindow;
     fgEnumWindows( fghcbWindowByHandle, &enumerator );
@@ -507,16 +476,12 @@ SFG_Window* fgWindowByHandle ( SFG_WindowHandleType hWindow )
  */
 static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
 {
-    /*
-     * Make sure we do not overwrite our precious results...
-     */
+    /* Make sure we do not overwrite our precious results... */
     if( enumerator->found )
         return;
 
-    /*
-     * Check the window's handle. Hope this works. Looks ugly. That's for sure.
-     */
-    if( window->ID == ( int )(enumerator->data) ) /* XXX int/ptr conversion! */
+    /* Check the window's handle. Hope this works. Looks ugly. That's for sure. */
+    if( window->ID == *( int *)(enumerator->data) )
     {
         enumerator->found = GL_TRUE;
         enumerator->data = window;
@@ -524,9 +489,7 @@ static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
         return;
     }
 
-    /*
-     * Otherwise, check this window's children
-     */
+    /* Otherwise, check this window's children */
     fgEnumSubWindows( window, fghcbWindowByID, enumerator );
 }
 
@@ -539,11 +502,9 @@ SFG_Window* fgWindowByID( int windowID )
 {
     SFG_Enumerator enumerator;
 
-    /*
-     * Uses a method very similiar for fgWindowByHandle...
-     */
+    /* Uses a method very similiar for fgWindowByHandle... */
     enumerator.found = GL_FALSE;
-    enumerator.data = ( void * )windowID; /* XXX int/pointer conversion! */
+    enumerator.data = ( void * )&windowID;
     fgEnumWindows( fghcbWindowByID, &enumerator );
     if( enumerator.found )
         return ( SFG_Window * )enumerator.data;
@@ -552,7 +513,7 @@ SFG_Window* fgWindowByID( int windowID )
 
 /*
  * Looks up a menu given its ID. This is easier that fgWindowByXXX
- * as all menus are placed in a single doubly linked list...
+ * as all menus are placed in one doubly linked list...
  */
 SFG_Menu* fgMenuByID( int menuID )
 {
@@ -560,9 +521,7 @@ SFG_Menu* fgMenuByID( int menuID )
 
     freeglut_assert_ready;
 
-    /*
-     * It's enough to check all entries in fgStructure.Menus...
-     */
+    /* It's enough to check all entries in fgStructure.Menus... */
     for( menu = (SFG_Menu *)fgStructure.Menus.First;
          menu;
          menu = (SFG_Menu *)menu->Node.Next )
@@ -582,10 +541,9 @@ void fgListInit(SFG_List *list)
 
 void fgListAppend(SFG_List *list, SFG_Node *node)
 {
-    SFG_Node *ln;
-
-    if ( ln = (SFG_Node *)list->Last )
+    if ( list->Last )
     {
+        SFG_Node *ln = (SFG_Node *) list->Last;
         ln->Next = node;
         node->Prev = ln;
     }
@@ -601,15 +559,13 @@ void fgListAppend(SFG_List *list, SFG_Node *node)
 
 void fgListRemove(SFG_List *list, SFG_Node *node)
 {
-    SFG_Node *ln;
-
-    if( ln = (SFG_Node *)node->Next )
-        ln->Prev = node->Prev;
-    if( ln = (SFG_Node *)node->Prev )
-        ln->Next = node->Next;
-    if( (ln = (SFG_Node *)list->First) == node )
+    if( node->Next )
+        ( ( SFG_Node * )node->Next )->Prev = node->Prev;
+    if( node->Prev )
+        ( ( SFG_Node * )node->Prev )->Next = node->Next;
+    if( ( ( SFG_Node * )list->First ) == node )
         list->First = node->Next;
-    if( (ln = (SFG_Node *)list->Last) == node )
+    if( ( ( SFG_Node * )list->Last ) == node )
         list->Last = node->Prev;
 }