Commit of John's change to stop an infinite-loop condition when the
authorRichard Rauch <rkr@olib.org>
Wed, 10 Dec 2003 23:59:45 +0000 (23:59 +0000)
committerRichard Rauch <rkr@olib.org>
Wed, 10 Dec 2003 23:59:45 +0000 (23:59 +0000)
only windows left are freeglut menu windows, and correctly calls exit()
if we drop out of the main loop without having requested any freeglut
extensions to glutMainLoop() handling.

git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@382 7f0cb862-5218-0410-a997-914c9d46530a

src/freeglut_main.c

index 5fbce0c..4a4d9c6 100644 (file)
@@ -1088,16 +1088,27 @@ void FGAPIENTRY glutMainLoop( void )
     fgState.ExecState = GLUT_EXEC_STATE_RUNNING ;
     while( fgState.ExecState == GLUT_EXEC_STATE_RUNNING )
     {
-        glutMainLoopEvent( );
+        SFG_Window *window;
 
-        if( fgStructure.Windows.First == NULL )
+        glutMainLoopEvent( );
+        /*
+         * Step through the list of windows, seeing if there are any
+         * that are not menus
+         */ 
+        for( window = ( SFG_Window * )fgStructure.Windows.First;
+             window;
+             window = ( SFG_Window * )window->Node.Next )
+            if ( ! ( window->IsMenu ) )
+                break;
+        
+        if( ! window )
             fgState.ExecState = GLUT_EXEC_STATE_STOP;
         else
         {
             if( fgState.IdleCallback )
                 fgState.IdleCallback( );
 
-            fgSleepForEvents();
+            fgSleepForEvents( );
         }
     }
 
@@ -1106,6 +1117,8 @@ void FGAPIENTRY glutMainLoop( void )
      * of a freeglut session, so that another glutInit() call can happen
      */
     fgDeinitialize( );
+    if( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT )
+        exit( 0 );
 }
 
 /*