some clean up in WM_KILLFOCUS handler

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1356 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2012-07-21 14:18:13 +00:00
parent 4a14f60a4e
commit 2be86de619

View File

@ -495,7 +495,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
case WM_KILLFOCUS:
{
SFG_Menu* menu = NULL;
/* printf("WM_KILLFOCUS (ismenu: %i): %p\n", window->IsMenu, window ); */
printf("WM_KILLFOCUS: %p\n", window );
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
@ -504,26 +504,41 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
application or FreeGLUT window (if one is running multiple
windows). If so, close menu the active menu.
*/
if ( fgStructure.CurrentMenu )
if ( fgStructure.Menus.First )
menu = fgGetActiveMenu();
if ( menu )
{
SFG_Window* wnd = NULL;
HWND hwnd = GetForegroundWindow(); /* Get window with current focus */
HWND hwnd = GetFocus(); /* Get window with current focus - NULL for non freeglut windows */
printf(" hwnd: %p\n",hwnd);
if (hwnd)
/* See if its one of our windows */
/* See which of our windows it is */
wnd = fgWindowByHandle(hwnd);
//printf(" got menu: %p\n",menu);
printf(" wnd: %p, wnd->AM->PW: %p, menu->PW: %p\n",wnd,wnd&&wnd->ActiveMenu?wnd->ActiveMenu->ParentWindow:0,menu->ParentWindow);
if (wnd)
printf(" wnd menu: %i, wnd->ActiveMenu: %p, wnd->Parent: %p\n",wnd->IsMenu,wnd->ActiveMenu,wnd->Parent);
if (!hwnd || !wnd)
{
/* User switched to another application*/
fgDeactivateMenu(menu->ParentWindow);
else if (
( wnd->IsMenu && wnd->ActiveMenu && wnd->ActiveMenu->ParentWindow!=menu->ParentWindow) || /* Make sure we don't kill the menu when trying to enter a submenu */
(!wnd->IsMenu && wnd!=menu->ParentWindow)
)
printf(" -> kill1\n");
}
else if (!wnd->IsMenu && wnd!=menu->ParentWindow)
{
/* User switched to another FreeGLUT window */
fgDeactivateMenu(menu->ParentWindow);
printf(" -> kill2\n");
}
else
{
printf(" -> survive\n");
}
}
}
break;