* it is possible to have our socket drained but still have
* unprocessed events. (Or, this may just be normal with
* X, anyway?) We do non-trivial processing of X events
- * after tham in event-reading loop, in any case, so we
+ * after the event-reading loop, in any case, so we
* need to allow that we may have an empty socket but non-
* empty event queue.
*/
SFG_Window* window;
XEvent event;
- /*
- * This code was repeated constantly, so here it goes into a definition:
- */
+ /* This code was repeated constantly, so here it goes into a definition: */
#define GETWINDOW(a) \
window = fgWindowByHandle( event.a.window ); \
if( window == NULL ) \
switch( event.type )
{
case ClientMessage:
- /*
- * Destroy the window when the WM_DELETE_WINDOW message arrives
- */
+ /* Destroy the window when the WM_DELETE_WINDOW message arrives */
if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.DeleteWindow )
{
GETWINDOW( xclient );
fgDeinitialize( );
exit( 0 );
}
+ else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )
+ fgState.ExecState = GLUT_EXEC_STATE_STOP;
- fgState.ExecState = GLUT_EXEC_STATE_STOP;
return;
}
break;
break;
}
- /*
- * No active menu, let's check whether we need to activate one.
- */
+ /* No active menu, let's check whether we need to activate one. */
if( ( 0 <= button ) &&
( FREEGLUT_MAX_MENUS > button ) &&
( window->Menu[ button ] ) &&
pressed )
{
- /*
- * XXX Posting a requisite Redisplay seems bogus.
- */
+ /* XXX Posting a requisite Redisplay seems bogus. */
window->State.Redisplay = GL_TRUE;
fgSetWindow( window );
fgActivateMenu( window, button );
);
}
- /*
- * Trash the modifiers state
- */
+ /* Trash the modifiers state */
fgState.Modifiers = 0xffffffff;
}
break;
fgDeinitialize( );
exit( 0 );
}
- fgState.ExecState = GLUT_EXEC_STATE_STOP;
+ else if( fgState.ActionOnWindowClose == GLUT_ACTION_GLUTMAINLOOP_RETURNS )
+ fgState.ExecState = GLUT_EXEC_STATE_STOP;
+
return;
}
switch( uMsg )
{
case WM_CREATE:
- /*
- * The window structure is passed as the creation structure paramter...
- */
+ /* The window structure is passed as the creation structure paramter... */
window = (SFG_Window *) (((LPCREATESTRUCT) lParam)->lpCreateParams);
assert( window != NULL );
break;
#if 0
case WM_SETFOCUS:
- printf("WM_SETFOCUS: %p\n", window );
+/* printf("WM_SETFOCUS: %p\n", window ); */
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
break;
if (LOWORD(wParam) != WA_INACTIVE)
{
/* glutSetCursor( fgStructure.Window->State.Cursor ); */
- printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window,
- window->State.Cursor );
+/* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window,
+ window->State.Cursor ); */
glutSetCursor( window->State.Cursor );
}
{
/*
* We have received a system command message. Try to act on it.
- * The commands are passed in through the "lParam" parameter:
- * Clicking on a corner to resize the window gives a "F004" message
- * but this is not defined in my header file.
+ * The commands are passed in through the "wParam" parameter:
+ * The least significant digit seems to be which edge of the window
+ * is being used for a resize event:
+ * 4 3 5
+ * 1 2
+ * 7 6 8
+ * Congratulations and thanks to Richard Rauch for figuring this out..
*/
- switch ( lParam )
+ switch ( wParam & 0xfff0 )
{
case SC_SIZE :
break ;
case SC_HOTKEY :
break ;
+
+ default:
+#if _DEBUG
+ fgWarning( "Unknown wParam type 0x%x\n", wParam );
+#endif
+ break;
}
}
#endif /* !TARGET_HOST_WINCE */