X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_main.c;h=36faaf9743e18012e9b2e384c0a04e15629f99fd;hb=ed6b95e994d10023d3d6a230667f019373fe50b5;hp=d464ca4f7d5e59de8ea9a7cbbecca135cf1a5fbb;hpb=439e8027f208f0db1a0f25ed510ecb414cb9e77b;p=freeglut diff --git a/src/freeglut_main.c b/src/freeglut_main.c index d464ca4..36faaf9 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -89,7 +89,7 @@ struct GXKeyList gxKeyList; */ static void fghReshapeWindow ( SFG_Window *window, int width, int height ) { - SFG_Window *current_window = fgStructure.Window; + SFG_Window *current_window = fgStructure.CurrentWindow; freeglut_return_if_fail( window != NULL ); @@ -187,7 +187,7 @@ static void fghReshapeWindow ( SFG_Window *window, int width, int height ) */ static void fghRedrawWindow ( SFG_Window *window ) { - SFG_Window *current_window = fgStructure.Window; + SFG_Window *current_window = fgStructure.CurrentWindow; freeglut_return_if_fail( window ); freeglut_return_if_fail( FETCH_WCB ( *window, Display ) ); @@ -1025,7 +1025,7 @@ void FGAPIENTRY glutMainLoop( void ) { if ( FETCH_WCB( *window, Visibility ) ) { - SFG_Window *current_window = fgStructure.Window ; + SFG_Window *current_window = fgStructure.CurrentWindow ; INVOKE_WCB( *window, Visibility, ( window->State.Visible ) ); fgSetWindow( current_window ); @@ -1223,27 +1223,19 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, case WM_ACTIVATE: if (LOWORD(wParam) != WA_INACTIVE) { -/* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window, +/* printf("WM_ACTIVATE: fgSetCursor( %p, %d)\n", window, window->State.Cursor ); */ - glutSetCursor( window->State.Cursor ); + fgSetCursor( window, window->State.Cursor ); } lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); break; #endif - /* - * XXX Why not re-use some common code with the glutSetCursor() - * XXX function (or perhaps invoke glutSetCursor())? - * XXX That is, why are we duplicating code, here, from - * XXX glutSetCursor()? The WIN32 code should be able to just - * XXX call glutSetCursor() instead of defining two macros - * XXX and implementing a nested case in-line. - */ case WM_SETCURSOR: /* printf ( "Cursor event %x %x %x %x\n", window, window->State.Cursor, lParam, wParam ) ; */ if( LOWORD( lParam ) == HTCLIENT ) - glutSetCursor ( window->State.Cursor ) ; + fgSetCursor ( window, window->State.Cursor ) ; else lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); break; @@ -1273,6 +1265,16 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, */ return 0; + /* XXX For a future patch: we need a mouse entry event. Unfortunately Windows + * XXX doesn't give us one, so we will probably need a "MouseInWindow" flag in + * XXX the SFG_Window structure. Set it to true to begin with and then have the + * XXX WM_MOUSELEAVE code set it to false. Then when we get a WM_MOUSEMOVE event, + * XXX if the flag is false we invoke the Entry callback and set the flag to true. + */ + case 0x02a2: /* This is the message we get when the mouse is leaving the window */ + INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) ); + break ; + case WM_MOUSEMOVE: { #if TARGET_HOST_WINCE @@ -1387,15 +1389,6 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, window->State.MouseX, window->State.MouseY ) ) break; - if( window->Menu[ button ] && pressed ) - { - window->State.Redisplay = GL_TRUE; - fgSetWindow( window ); - fgActivateMenu( window, button ); - - break; - } - /* Set capture so that the window captures all the mouse messages */ /* * XXX - Multiple button support: Under X11, the mouse is not released