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:
parent
3eda176577
commit
b362113e1f
@ -554,16 +554,24 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
|||||||
{
|
{
|
||||||
TRACKMOUSEEVENT tme;
|
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 ) ;
|
fgSetCursor ( window, window->State.Cursor ) ;
|
||||||
INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );
|
|
||||||
|
|
||||||
tme.cbSize = sizeof(TRACKMOUSEEVENT);
|
/* If an EntryFunc callback is specified by the user, also
|
||||||
tme.dwFlags = TME_LEAVE;
|
* invoke that callback and start mouse tracking so that
|
||||||
tme.hwndTrack = window->Window.Handle;
|
* we get a WM_MOUSELEAVE message
|
||||||
TrackMouseEvent(&tme);
|
*/
|
||||||
|
if (FETCH_WCB( *window, Entry ))
|
||||||
|
{
|
||||||
|
INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );
|
||||||
|
|
||||||
window->State.pWState.MouseTracking = GL_TRUE;
|
tme.cbSize = sizeof(TRACKMOUSEEVENT);
|
||||||
|
tme.dwFlags = TME_LEAVE;
|
||||||
|
tme.hwndTrack = window->Window.Handle;
|
||||||
|
TrackMouseEvent(&tme);
|
||||||
|
|
||||||
|
window->State.pWState.MouseTracking = GL_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -573,6 +581,10 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
|||||||
|
|
||||||
case WM_MOUSELEAVE:
|
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;
|
SFG_Window* saved_window = fgStructure.CurrentWindow;
|
||||||
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
|
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
|
||||||
fgSetWindow(saved_window);
|
fgSetWindow(saved_window);
|
||||||
|
Reference in New Issue
Block a user