added warning and error callbacks to demo
authorDiederick Niehorster <dcnieho@gmail.com>
Tue, 24 Jul 2012 15:03:53 +0000 (15:03 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Tue, 24 Jul 2012 15:03:53 +0000 (15:03 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1369 7f0cb862-5218-0410-a997-914c9d46530a

progs/demos/CallbackMaker/CallbackMaker.c
src/fg_menu.c

index ac127fb..5abd8ee 100644 (file)
@@ -131,6 +131,40 @@ Display(void)
   glutSwapBuffers();
 }
 
+static void
+Warning(const char *fmt, va_list ap)
+{
+    printf("%6d Warning callback:\n");
+
+    /* print warning message */
+    vprintf(fmt, ap);
+}
+
+static void
+Error(const char *fmt, va_list ap)
+{
+#define STRING_LENGTH   10
+    char dummy_string[STRING_LENGTH];
+    printf("%6d Error callback:\n");
+
+    /* print warning message */
+    vprintf(fmt, ap);
+
+    /* deInitialize the freeglut state */
+    /* This all goes haywire of course when the error occurs during deinitialize,
+     * one might want to call exit directly as its possible freeglut is messed
+     * up internally when error is called. 
+     */
+    printf("Error callback: calling glutExit() to prepare for clean exit\n");
+    glutExit();
+
+    /* terminate program */
+    printf ( "Please enter something to exit: " );
+    fgets ( dummy_string, STRING_LENGTH, stdin );
+
+    exit(1);
+}
+
 static void 
 Reshape(int width, int height)
 {
@@ -407,7 +441,9 @@ MenuDestroy( void )
   menudestroy_called = 1 ;
   printf ( "%6d Window %d MenuDestroy Callback\n",
             ++sequence_number, window ) ;
-  glutPostRedisplay () ;
+
+  if (window)   /* When destroyed when shutting down, not always a window defined... */
+    glutPostRedisplay () ;
 }
 
 static void 
@@ -434,6 +470,8 @@ main(int argc, char *argv[])
 
   int menuID, subMenuA, subMenuB;
 
+  glutInitWarningFunc(Warning);
+  glutInitErrorFunc(Error);
   glutInitWindowSize(500, 250);
   glutInitWindowPosition ( 140, 140 );
   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE );
index fb5f4a5..f96295b 100644 (file)
@@ -545,7 +545,6 @@ static void fghActivateMenu( SFG_Window* window, int button )
         window->State.MouseY + glutGet( GLUT_WINDOW_Y ) - menu->Y;
 
     /* Menu status callback */
-    printf("Menu status callback: %p\n",fgState.MenuStatusCallback);
     if (fgState.MenuStateCallback || fgState.MenuStatusCallback)
     {
         fgStructure.CurrentMenu = menu;