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: case WM_KILLFOCUS:
{ {
SFG_Menu* menu = NULL; 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 ); lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) ); 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 application or FreeGLUT window (if one is running multiple
windows). If so, close menu the active menu. windows). If so, close menu the active menu.
*/ */
if ( fgStructure.CurrentMenu ) if ( fgStructure.Menus.First )
menu = fgGetActiveMenu(); menu = fgGetActiveMenu();
if ( menu ) if ( menu )
{ {
SFG_Window* wnd = NULL; 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) if (hwnd)
/* See if its one of our windows */ /* See which of our windows it is */
wnd = fgWindowByHandle(hwnd); 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) if (!hwnd || !wnd)
{
/* User switched to another application*/ /* User switched to another application*/
fgDeactivateMenu(menu->ParentWindow); fgDeactivateMenu(menu->ParentWindow);
else if ( printf(" -> kill1\n");
( 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) else if (!wnd->IsMenu && wnd!=menu->ParentWindow)
) {
/* User switched to another FreeGLUT window */ /* User switched to another FreeGLUT window */
fgDeactivateMenu(menu->ParentWindow); fgDeactivateMenu(menu->ParentWindow);
printf(" -> kill2\n");
}
else
{
printf(" -> survive\n");
}
} }
} }
break; break;