#endif
window->Window.DoubleBuffered =
- ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0 ;
+ ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0;
if ( ! window->Window.DoubleBuffered )
{
- glDrawBuffer ( GL_FRONT ) ;
- glReadBuffer ( GL_FRONT ) ;
+ glDrawBuffer ( GL_FRONT );
+ glReadBuffer ( GL_FRONT );
}
fgSetWindow( window );
}
#elif TARGET_HOST_WIN32
- SendMessage(
- window->Window.Handle,
- WM_CLOSE,
- 0,
- 0
- );
+ /*
+ * Make sure we don't close a window with current context active
+ */
+ if( fgStructure.Window == window )
+ wglMakeCurrent( NULL, NULL );
+ /*
+ * Step through the list of windows. If the rendering context
+ * is not being used by another window, then we delete it.
+ */
+ {
+ int used = FALSE ;
+ SFG_Window *iter ;
+
+ for( iter = (SFG_Window *)fgStructure.Windows.First;
+ iter;
+ iter = (SFG_Window *)iter->Node.Next )
+ {
+ if( ( iter->Window.Context == window->Window.Context ) &&
+ ( iter != window ) )
+ used = TRUE;
+ }
+
+ if( ! used )
+ wglDeleteContext( window->Window.Context );
+ }
+
+ DestroyWindow( window->Window.Handle );
#endif
}
parent = fgWindowByID( parentID );
freeglut_return_val_if_fail( parent != NULL, 0 );
window = fgCreateWindow( parent, "", x, y, w, h, GL_FALSE, GL_FALSE );
+ window->State.OldHeight = window->State.OldWidth = -1;
return window->ID;
}
freeglut_return_if_fail( window != NULL );
{
fgExecutionState ExecState = fgState.ExecState;
- fgAddToWindowDestroyList( window, GL_TRUE );
+ fgAddToWindowDestroyList( window );
fgState.ExecState = ExecState;
}
}
return;
}
- fgSetWindow( window ) ;
+ fgSetWindow( window );
}
/*