fixes two cases of menu's not closing when they should:
1. open a menu in one of the freeglut windows, then activate another app (or the console window) by clicking on that. The freeglut menu doesn't close, and as it is topmost, it shines through everything. 2. open a menu in one of the freeglut windows, then click on the non-client area of another freeglut window (e.g. the title bar): menu doesn't close git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1352 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
622479f8b4
commit
ec9b01736e
@ -497,9 +497,29 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
|||||||
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
||||||
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
|
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
|
||||||
|
|
||||||
|
/* If this is a menu that lost focus, see if user either switched
|
||||||
|
application or FreeGLUT window (if one is running multiple
|
||||||
|
windows). If so, close menu that lost focus.
|
||||||
|
*/
|
||||||
if( window->IsMenu &&
|
if( window->IsMenu &&
|
||||||
window->ActiveMenu && window->ActiveMenu->IsActive )
|
window->ActiveMenu && window->ActiveMenu->IsActive )
|
||||||
fgUpdateMenuHighlight( window->ActiveMenu );
|
{
|
||||||
|
SFG_Window* wnd = NULL;
|
||||||
|
HWND hwnd = GetForegroundWindow(); /* Get window with current focus */
|
||||||
|
if (hwnd)
|
||||||
|
/* See if its one of our windows */
|
||||||
|
wnd = fgWindowByHandle(hwnd);
|
||||||
|
|
||||||
|
if (!hwnd || !wnd)
|
||||||
|
/* User switched to another application*/
|
||||||
|
fgDeactivateMenu(window->ActiveMenu->ParentWindow);
|
||||||
|
else if (
|
||||||
|
( wnd->IsMenu && wnd->ActiveMenu->ParentWindow!=window->ActiveMenu->ParentWindow) || /* Make sure we don't kill the menu when trying to enter a submenu */
|
||||||
|
(!wnd->IsMenu && wnd!=window->ActiveMenu->ParentWindow)
|
||||||
|
)
|
||||||
|
/* User switched to another FreeGLUT window */
|
||||||
|
fgDeactivateMenu(window->ActiveMenu->ParentWindow);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user