Only do mouse tracking for EntryFunc if user specified an entryfunc

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1521 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2013-02-27 08:06:24 +00:00
parent 3eda176577
commit b362113e1f

View File

@ -554,8 +554,15 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
{
TRACKMOUSEEVENT tme;
/* Cursor just entered window, set cursor look, invoke callback and start tracking so that we get a WM_MOUSELEAVE message */
/* Cursor just entered window, set cursor look */
fgSetCursor ( window, window->State.Cursor ) ;
/* If an EntryFunc callback is specified by the user, also
* invoke that callback and start mouse tracking so that
* we get a WM_MOUSELEAVE message
*/
if (FETCH_WCB( *window, Entry ))
{
INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );
tme.cbSize = sizeof(TRACKMOUSEEVENT);
@ -566,6 +573,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
window->State.pWState.MouseTracking = GL_TRUE;
}
}
}
else
/* Only pass non-client WM_SETCURSOR to DefWindowProc, or we get WM_SETCURSOR on parents of children as well */
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
@ -573,6 +581,10 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
case WM_MOUSELEAVE:
{
/* NB: This message is only received when a EntryFunc callback
* is specified by the user, as that is the only condition under
* which mouse tracking is setup in WM_SETCURSOR handler above
*/
SFG_Window* saved_window = fgStructure.CurrentWindow;
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
fgSetWindow(saved_window);